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_jsonredis.on 'message'正确启动。实际上,一切都很好。

当我刷新客户端代码所在的页面而不重新启动服务器时,就会出现问题。我的“连接销毁”日志正确显示,但似乎连接从未真正消失。每次刷新时,都会添加另一个侦听器。下面的屏幕截图应有助于弄清我的意思。

每个“连接破坏” /“连接建立”均表示刷新。

在此处输入图片说明

我还假设客户端的代码将基于每个浏览器窗口。但是,即使当我打开一个新的浏览器时,我也得到了输出,指出所有事件都将应用于每个窗口。

关于它为什么做的任何提示以及正确的实现方法将不胜感激。

线

问题是由我的redis.on 'message'听众的位置引起的我在创建的每个套接字上都在监听它。实际上,我只需要从全局的角度聆听它,然后向所有房间发送消息。看起来像这样:

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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

服务器套接字断开连接并停止监听

来自分类Dev

套接字断开连接时退出Python While循环

来自分类Dev

java套接字监听不接受连接?

来自分类Dev

在Android中连接和断开套接字

来自分类Dev

套接字始终断开C ++的连接

来自分类Dev

在Android中连接和断开套接字

来自分类Dev

套接字无法检测到断开连接

来自分类Dev

处理断开的套接字

来自分类Dev

Python:套接字监听连接时显示消息“ Waiting for player ...”

来自分类Dev

强制套接字断开连接而不伪造RST,Linux

来自分类Dev

单击带有Href的A标签,套接字断开连接

来自分类Dev

如何检测Boost Tcp套接字何时断开连接

来自分类Dev

断开连接时,Java套接字不会超时

来自分类Dev

使用TCP KeepAlive检测套接字断开连接

来自分类Dev

如何判断套接字是否已断开连接(Java)

来自分类Dev

连接断开后恢复文件上传/下载(套接字编程)

来自分类Dev

Web套接字在OpenShift上断开连接(使用WildFly 8.2.1)

来自分类Dev

断开或重新加载时,Io套接字重置连接

来自分类Dev

Ionic Client网络套接字已断开连接

来自分类Dev

使用TCP KeepAlive检测套接字断开连接

来自分类Dev

单击带有Href的A标签,套接字断开连接

来自分类Dev

断开或重新加载时Io套接字重置连接

来自分类Dev

Node.JS 原始套接字:如何重复连接断开?

来自分类Dev

客户端断开连接时,服务器不会删除/断开套接字

来自分类Dev

获取套接字监听的事件

来自分类Dev

创建多个监听套接字

来自分类Dev

Web套接字:无法在Internet断开连接上检测到客户端连接

来自分类Dev

通过节点中的连接回调外部的监听来访问套接字

来自分类Dev

当没有监听套接字绑定但连接打开时获取EADDRINUSE的语义是什么

Related 相关文章

  1. 1

    服务器套接字断开连接并停止监听

  2. 2

    套接字断开连接时退出Python While循环

  3. 3

    java套接字监听不接受连接?

  4. 4

    在Android中连接和断开套接字

  5. 5

    套接字始终断开C ++的连接

  6. 6

    在Android中连接和断开套接字

  7. 7

    套接字无法检测到断开连接

  8. 8

    处理断开的套接字

  9. 9

    Python:套接字监听连接时显示消息“ Waiting for player ...”

  10. 10

    强制套接字断开连接而不伪造RST,Linux

  11. 11

    单击带有Href的A标签,套接字断开连接

  12. 12

    如何检测Boost Tcp套接字何时断开连接

  13. 13

    断开连接时,Java套接字不会超时

  14. 14

    使用TCP KeepAlive检测套接字断开连接

  15. 15

    如何判断套接字是否已断开连接(Java)

  16. 16

    连接断开后恢复文件上传/下载(套接字编程)

  17. 17

    Web套接字在OpenShift上断开连接(使用WildFly 8.2.1)

  18. 18

    断开或重新加载时,Io套接字重置连接

  19. 19

    Ionic Client网络套接字已断开连接

  20. 20

    使用TCP KeepAlive检测套接字断开连接

  21. 21

    单击带有Href的A标签,套接字断开连接

  22. 22

    断开或重新加载时Io套接字重置连接

  23. 23

    Node.JS 原始套接字:如何重复连接断开?

  24. 24

    客户端断开连接时,服务器不会删除/断开套接字

  25. 25

    获取套接字监听的事件

  26. 26

    创建多个监听套接字

  27. 27

    Web套接字:无法在Internet断开连接上检测到客户端连接

  28. 28

    通过节点中的连接回调外部的监听来访问套接字

  29. 29

    当没有监听套接字绑定但连接打开时获取EADDRINUSE的语义是什么

热门标签

归档