【问题标题】:node.js call ws.send from controllernode.js 从控制器调用 ws.send
【发布时间】:2017-10-27 11:29:35
【问题描述】:

我想发送一个 websocket,使用来自不同控制器的 express-ws,而不是通过路由,我在 server.js 中有以下代码:

var SocketController = require('./routes/ws.routes');
var app  = express();
var server  = require('http').createServer(app);
var expressWs = require('express-ws')(app);

app.ws('/', SocketController.socketFunction);

SocketController 看起来像这样:

exports.socketFunction = function (ws, req) {
    ws.on('message', function(msg) {
        console.log(msg);
        ws.send("hello");
    });
}

是否可以调用

ws.send()

来自另一个控制器的事件?我如何获得“ws”对象?

谢谢!

【问题讨论】:

    标签: javascript node.js express websocket


    【解决方案1】:

    您必须将套接字存储在内存中。要从不同模块访问存储的套接字,您可以将这些套接字的引用存储在单独的模块中。

    例如,您可以创建一个模块 socketCollection 来存储所有活动的套接字。

    socketCollection.js:

    exports.socketCollection = [];
    

    您可以在定义 Web 套接字服务器的位置导入此模块:

    var socketCollection = require('./socketCollection');
    var SocketController = require('./routes/ws.routes');
    var app  = express();
    var server  = require('http').createServer(app);
    var expressWs = require('express-ws')(app);
    
    expressWs.getWss().on('connection', function(ws) {
      socketCollection.push({
        id: 'someRandomSocketId',
        socket: ws,
      });
    });
    
    app.ws('/', SocketController.socketFunction);
    

    现在每次新客户端连接到服务器时,它的引用都会保存到 'socketCollection' 您可以通过导入此数组从任何模块访问这些客户端

    var socketCollection = require('./socketCollection');
    var ws = findSocket('someRandomSocketId', socketCollection);
    
    var findSocket = function(id, socketCollection) {
       var result  = socketCollection.filter(function(x){return x.id == id;} );
       return result ? result[0].socket : null;
    };
    

    【讨论】:

    • 太好了,谢谢!如果我想发送给所有人,我会这样做:collection.forEach((data,index) => { data.on('message', function(msg) { data.send("hello from node") ; }); })
    • 每个套接字都需要一个 socket.on 吗?
    • 不在socket上...向socket服务器注册一次事件...每次新客户端连接时都会调用...
    猜你喜欢
    • 1970-01-01
    • 2011-06-29
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多