node.js 从控制器调用 ws.send

编程入门 行业动态 更新时间:2024-10-04 21:22:47

node.js 从<a href=https://www.elefans.com/category/jswz/34/1771349.html style=控制器调用 ws.send"/>

node.js 从控制器调用 ws.send

我想发送一个 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”对象?

谢谢!

回答如下:

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

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

socketCollection.js:

exports.socketCollection = [];

您可以在定义网络套接字服务器的地方导入此模块:

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;
};

更多推荐

node.js 从控制器调用 ws.send

本文发布于:2024-05-31 01:39:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1771141.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:控制器   js   node   ws   send

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!