【问题标题】:Socket.io event on heartbeat心跳上的 Socket.io 事件
【发布时间】:2013-08-21 12:10:09
【问题描述】:

Socket.IO 使用心跳模式来确保客户端仍然连接。 如果我能够订阅服务器上的 heartbeat 事件,它将解决我的算法。

例如: socket.on “心跳”,-> 我的代码

知道这是否可行吗?

【问题讨论】:

    标签: javascript express coffeescript websocket socket.io


    【解决方案1】:

    心跳非常频繁,你确定这是正确的吗?我使用“连接”事件,这似乎可以满足您的需求:

      connect: (url, options, connectCallback) =>
        someFunction = =>
          @doSomeRedisStuff() if @connected
    
        @logger.debug "starting connection to url: #{url}"
        @socket = @socket.connect(url, options)
        @logger.debug "connecting ..."
        @socket.on "connect", =>    
          @logger.info "connected (socket id #{(@socket.socket.sessionid)})"
          @connected = true 
          setTimeout someFunction, 2000
          connectCallback() if connectCallback?
         @socket.on "disconnect", =>
           @connected = false 
    

    如果与服务器的连接中断(例如服务器重新启动),连接事件将在连接恢复时启动。 Socket.IO 对此很聪明。

    【讨论】:

    • 如果每次会话或会话的一部分连接一次。当客户端具有良好的网络时,连接可能会持续数小时或在我的应用案例中持续数天。我想知道在此期间连接是否有效。
    • @Luman75 还有一个socket.on 'disconnect', -> 。我只是将连接状态存储在某处并在这两个回调中更新。
    • 当然有断线。但我想在正在进行的 socket.io 连接期间“戳”一些 redis 变量。
    • @Luman75 我认为您应该在断开/连接回调中使用 setTimeout 设置和清除重复操作:stackoverflow.com/questions/11440132/…
    • 好的。如果你在睡眠中递归调用 someFunction 。那么是的,那会起作用。除非内存泄漏在这里可能是一个问题。
    猜你喜欢
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 2021-02-14
    • 2021-02-03
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多