NodeJS, Express, and eventful Socket.io



我想构建一个NodeJS API,这样当我到达端点时,应用程序将触发一个事件,该事件将导致其与emit的唯一套接字连接,并向其侦听器发送消息。在使用Python/Django、Redis和NodeJS/Socket.io之前,我已经构建了一个解决方案,Django作为API,Redis作为"事件触发器",但我想将不同的技术整合到NodeJS和Socket.io中

我尝试将socket.emit()代码移动到不同的模块中,然后app.use()处理这些模块,但由于没有套接字实例,代码中断了。

我还知道,您可以向端点上的所有套接字连接进行广播,例如:

app.use('socket.io/help', function(req, res) {
    console.log(req.query);
    io.sockets.emit('help_message', 'You should help me.');
    res.send('help msg sent');
});

但我正在寻找一种方法,允许客户端(没有套接字连接)到达端点并传递一个查询参数,该参数告诉NodeJS要向其连接的套接字中的哪个套接字发送消息

这可能吗?还是我试图对抗这个框架?例如,对于不同的JS WebSocket框架/技术,是否有不同的方法来实现这一点?

我一直处于同样的情况,但很容易解决

您已经在app.js 上创建了套接字

server = require('http').createServer(app),
io = require('socket.io').listen(server);
server.listen(port);
global.socketIO = io;

现在你可以把这个io实例调用到你的任何控制器,比如

app.use('socket.io/help', function(req, res) {
console.log(req.query);
 var io = global.socketIO;
 // UID IS THE VARIABLE
 io.sockets.emit('help_message'+UID, 'You should help me.');
 res.send('help msg sent');
});

客户端

<script src="/socket.io/socket.io.js"></script>
 <script>
window.socket.on("help_message_<%-UID%>", function(msg){ 
//// ACTION
 });

您可以加入一个带有您想要在其上接收消息的特定套接字的房间。

请参阅Rooms&socket.io文档中的命名空间

在您的服务台上加入chan功能:

io.on('connection', function(socket){
  socket.join('helpdesk');
});

并向他们广播:

app.use('socket.io/help', function(req, res) {
    console.log(req.query);
     var io = global.socketIO;
     io.sockets.emit('adduser', req.body.uid);
     io.to('helpdesk').emit('some event'):
     res.send('help msg sent');
});

相关内容

  • 没有找到相关文章

最新更新