本帖最后由 VisualEleven 于 2010-12-28 10:55:46 编辑

解决方案 »

  1.   

    1、如何确保你检查之后 到send函数执行之前都不掉线
    2、额外的检查只会让总开销更大吧
      

  2.   

    思路是错误的,,send返回值<=0,就表示断线了
      

  3.   

    如果客户端没有悠雅的断开,比如野蛮关机,或者是本身就是dos攻击的包,不太好解决.
      

  4.   

    Keepalive楼主是如何做的,是短连接还是长连接,如果是长连接的话,客户端多的时候你服务器也顶不住了。而短连接的话,一收一发这0.3秒内socket已经断开这本身就不太好处理,你总不能send超时个100ms就认为客户端挂了吧,总得retry多几次才认为挂了吧。这得看你的这种情况出现的机率有多大了。我想如果出现这种意外客户端挂掉的情况非常频繁的话,是不是得找下其它原因了?
      

  5.   


    这种情况的确不算频繁,但造成了非常麻烦的结果,结果是某些金钱上的损失(算严重吧?)。其实,通常情况是客户端通过socket发送一个请求,到服务器端完成请求,再发回结果给客户端时。 这一收一发整个过程,历时大概0.3~0.5秒。可就是这么短时间内,客户端有可能会断。我思考了一下,在服务器端发送前,需要确定一下socket连接仍然有效,再发。
    那么,从确定了,到正式发出这段时间,远远小于0.3秒,安全很多了。