SocketIO断开离开套接字侦听
我正在尝试使用SocketIO与Redis Pub / Sub结合来监视我的应用程序中的事件。 到目前为止,我有如下的服务器的东西
io.on 'connection', (socket) -> log.info "Connection established. [Socket: #{socket.id}]" socket.on 'join_room', (roomName) -> log.info "Join room '#{roomName}'. [Socket: #{socket.id}]" socket.join roomName redis.on 'message', (redisChannel, message) -> message = JSON.parse message log.info "Room: #{message.room} - Event: #{message.event} - Message: #{message.message}" io.sockets.in(message.room).emit(message.event, message.message) socket.on 'disconnect', -> log.info "Connection destroyed. [Socket #{socket.id}]"
然后,在客户端,我有
socket = io.connect('http://127.0.0.1:3333/') socket.emit('join_room', 'login_events') socket.emit('join_room', 'cj_alerts') socket.on 'failed_login', (msg) -> console.log msg socket.on 'successful_login', (msg) -> console.log msg
当服务器运行时,我可以使用$redis.publish 'redisChannel', {:room => 'room', :event => 'failed_login', :message => 'message'}.to_json
获取redis.on 'message'
点正确地发射。 事实上,一切运作良好。
当我刷新客户端代码所在的页面而无需重新启动服务器时,就会出现问题。 我的“连接销毁”日志正确,但似乎连接永远不会真正死亡。 每次刷新时,都会添加另一个侦听器。 下面的截图应该有助于澄清我的意思。
每个“连接被破坏”/“连接build立”信号刷新。
我还假定客户端的代码将在每个浏览器窗口的基础上。 然而,即使当我打开一个新的浏览器,我得到的输出说, 所有的事件正在应用到每个窗口。
任何提示,为什么它正在做什么和正确的方式,将不胜感激。
这个问题是由于我的redis.on 'message'
的位置造成的。 我在每一个我创build的套接字上都进行了监听。 实际上,我只需要从全局的angular度来听, 然后给任何房间留言。 这看起来像这样:
io.on 'connection', (socket) -> log.info "Connection established. [Socket: #{socket.id}]" socket.on 'join_room', (roomName) -> log.info "Join room '#{roomName}'. [Socket: #{socket.id}]" socket.join roomName socket.on 'disconnect', -> log.info "Connection destroyed. [Socket #{socket.id}]" redis.on 'message', (redisChannel, message) -> message = JSON.parse message log.info "Room: #{message.room} - Event: #{message.event} - Message: #{message.message}" io.sockets.in(message.room).emit(message.event, message.message)
- Nodejs&套接口io:警告 – 错误引发:错误:听EADDRINUSE
- 使用Socket.io与Node.js,Express和Jade
- Socket.io – 无法从客户端发送消息到服务器端
- 如何将用户名从php会话存储到nodejs中的socket.io库和套接字连接断开页面refresh.Why?
- 通过node.js套接字发送文本JSON如何处理'\ n \ r'符号
- 如何模仿一个irc服务器断开连接来testing我的nodejs irc bot?
- 当服务器脱机时,socket.io发射
- 在forEach循环中调用socket.disconnect实际上并不会在所有套接字上调用断开连接
- 如何使用socketio集群创buildnodejs?