Node.js NodeJS、Express和eventful Socket.io
我想构建一个NodeJS API,这样当我点击一个端点时,应用程序将触发一个事件,该事件将导致其唯一的套接字连接向其侦听器发出消息。在使用Python/Django、Redis和NodeJS/Socket.io之前,我已经构建了一个解决方案,Django作为API,Redis作为“事件触发器”,但我想将不同的技术整合到NodeJS和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()移动到这些模块中,但由于没有套接字实例,代码中断 我还知道,您
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上放置变量而不是字符串