Socket.io + Express:不同路由的不同事件/功能

时间:2013-03-31 19:42:10

标签: node.js express socket.io

嗯......我的第一个express + socketio节点已启动并运行。

Socketio几乎用在我的应用程序的每个页面上,因为在添加新条目时,应该使用server-push更新这些页面上显示的所有“列表”。

所以我得到了我的主app.js文件+一个包含所有route.js文件的路由目录。 现在我需要针对每条路线使用不同的socketio事件+函数,因为这些页面上会发生不同的事情。

现在问题是如何访问我的快速服务器来初始化socketio对象?

// app.js
var server = app.listen(app.get('port'), function(){...});
var io = socketio.listen(server);
// socket.io code here
// the code from here on should be different for each route.js file

或换句话说:

如何将socket.io的所有事件和函数定义排除到相应的路径文件中,以便为每个页面定义不同的socket.io事件和函数? 套接字当然总是在同一个端口上运行(我希望没问题?!)。

我希望这是可以理解的......有点难以解释。

最好的问候 帕特里克

1 个答案:

答案 0 :(得分:2)

取决于用户连接的路由,您可以使用socket.io库中的命名空间向特定用户组发送消息。

向从/news

连接的所有用户发送消息

io.of('/news').emit('update',{message:"a new article is available"});

对于客户端,一个简单的事件监听器会这样做(假设用户是/news命名空间)

socket.on('update',function(data){
 alert(data.message);
});

恕我直言,你不需要不同的事件,只需使用相同的事件,并在每条路线中以不同的方式处理它们。