Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js NodeJS、Express和eventful Socket.io_Node.js_Express_Websocket_Socket.io - Fatal编程技术网

Node.js NodeJS、Express和eventful Socket.io

Node.js NodeJS、Express和eventful Socket.io,node.js,express,websocket,socket.io,Node.js,Express,Websocket,Socket.io,我想构建一个NodeJS API,这样当我点击一个端点时,应用程序将触发一个事件,该事件将导致其唯一的套接字连接向其侦听器发出消息。在使用Python/Django、Redis和NodeJS/Socket.io之前,我已经构建了一个解决方案,Django作为API,Redis作为“事件触发器”,但我想将不同的技术整合到NodeJS和Socket.io中 我尝试将socket.emit()代码移动到不同的模块中,然后将app.use()移动到这些模块中,但由于没有套接字实例,代码中断 我还知道,您

我想构建一个NodeJS API,这样当我点击一个端点时,应用程序将触发一个事件,该事件将导致其唯一的套接字连接向其侦听器发出消息。在使用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要向哪个连接的套接字发送消息


这可能吗?还是我在试图与框架抗争?e、 例如,使用不同的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
 });

window.socket.on(“帮助”消息),函数(msg){
////行动
});

我也遇到过同样的情况,但很容易解决

您已经在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
 });

window.socket.on(“帮助”消息),函数(msg){
////行动
});

您可以加入一个房间,房间里有您想要接收信息的特定插座

在您的帮助热线会议上加入一个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');
});

您可以加入具有特定套接字的房间,以便在其上接收消息

在您的帮助热线会议上加入一个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');
});

你想在你的控制器/模块文件中使用套接字而不是app.js吗?你想在控制器/模块文件中使用套接字而不是app.js吗?我可以看到
全局
对象如何帮助保持io实例,但这个解决方案仍然会发送到所有连接的套接字,而不仅仅是带有uid的套接字。。。对吗?您可以在emit和on上放置变量而不是字符串,正如我在上面编辑的那样,我可以看到
全局
对象如何帮助保持io实例,但此解决方案仍然会发送到所有连接的套接字,而不仅仅是带有uid的套接字。。。对吗?正如我在上面编辑的,您可以在emit和on上放置变量而不是字符串