用delphi7+Indy9.0.18开发的即时通信中出现这样一个问题:
平时运行都很正常,但隔两三天会出现客户端程序死掉的情况(没响应),去服务端看了下,连接是正常的(我在tcpServer的OnConnect事件中记录了客户端的IP和其他一些信息,服务端能正常显示刚连上来的客户端,所以连接应该是正常的),那么估计应该是客户端收不到服务端的信息,一直处在死等状态下,不知对否?
出现这种情况时所有客户端都会死掉,但只是重启一下服务就又都可以了(将TCPServer False后再重新激活)。
补充:
因为数据量不大,客户端用的是单线程。服务端建有数据库连接池处理并发的问题,服务端每个线程独占一个连接。
由于无法模拟这种死掉的情况,所以也不好跟踪,请各位大虾帮我分析下为何客户端会经常死掉,以及应该如何处理,不胜感激。

解决方案 »

  1.   

    一直感觉delphi写这种服务型的24x7程序,是比较容易出现怪事。。也许原因是第三方控件,也许是string的使用,等等
    所以考虑服务端实现尽量用delphi写isapi程序,通信由IIS来完成,delphi只做业务处理具体这个问题,也许服务器定时给客户端(或仅仅是一段时间没有交互的客户端)发一个信号,如果没有回应,则自动断开那些客户端
      

  2.   

    【客户端需要调用服务端的方法时才去连接,得到结果后就断开与服务端的连接。】已经是短连接了。日志能看到 收到客户端的数据吗?
    以前测试socket的频繁使用,有时候发现个别连接对象里的socket句柄其实是空的!