没用过心跳包,不是很了解,只知道心跳包是定时发送数据维持客户端和服务器连接的,有几个疑惑想请大家帮忙解答一下:
1、包的格式是自定义的还是有固定协议的?
2、是需要客户端和服务器端双方支持吗?
3、如果服务器端是第三方写的,不可能改动,那可以用心跳包吗?

解决方案 »

  1.   

    1.心跳包实际就是一个自定义的协议包,主要用于判断对方机器是否还在连接。你可以自己定义协议的格式。
    2.既然是协议,当然需要c/s双方都支持
    3.如果你仅仅是为了判断服务器是否在线,用tcp协议自带的心跳包就可以了,用setsockopt设置socket的SO_KEEPALIVE属性,可以设置发包时间间隔
      

  2.   

    1、包的格式是自定义的还是有固定协议的?
    2、是需要客户端和服务器端双方支持吗?
    3、如果服务器端是第三方写的,不可能改动,那可以用心跳包吗?1.是自己得协议
    2.需要
    3.不行心跳包:一般是用来判断对方(设备,进程或其它网元)是否正常动行,一般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉。因为udp 是无链接得,所以只能用这种方式来看对方是否存活.
      

  3.   

    为了减少服务端的工作压力可以用以下方案:C定时向S发送心跳包(30/次)
    S收到C的心跳包后将包到来的时间记录到数据库中去.(并不须回C我收到你的心跳包)
    如果S想检测该C是不是仍在线,可取出最后一次心跳时间然后与当前时间进行比较如
    果大于30秒,则认为该C已经断线了,否则该C仍在线.这种方案适合于客户端意外断线,或卦了.通常情况下客户正常下线是要发一个包告诉
    服务端我已经下线了.