2013-03-31 49 views
3

呃......我得到了我的第一个express + socketio节点App并运行。Socket.io + Express:针对不同路由的不同事件/功能

,因为所有的“名单”在这些页面上应与服务器推送更新表明,当在添加新条目Socketio用在几乎每一个网页在我的应用程序。

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

现在的问题是怎样访问我的Express服务器的初始化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的活动和功能为每个页面定义? 套接字当然可以在同一个端口上运行(我希望没有问题?!)。

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

问候 帕特里克

回答

2

具体取决于用户连接从您可以使用的命名空间中socket.io库发出一条消息给用户的一组特定的路线上。

发射出其中来自/news

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

连接为用于客户端一个简单的事件侦听器将会做一个消息给所有用户(假设用户是/news命名空间)

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

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

+0

谢谢,看起来相当有帮助! :) 所以这个.of()方法应该可以开箱即用吗? 还有一件事:这是否也适用于backbonejs使用的“假Urls”? (问这是因为backbonejs的网址看起来更像是“domain.com/#page”) –

+0

'.of()'yes会工作“开箱即用”,因为文档说对于##没有尝试过它,我认为它不会工作,因为它将属于'/'命名空间,'#'表示网址中的锚点与URL'/' – Gntem

相关问题