关于Indy的问题

equn93 2009-05-27 03:44:37
用delphi7+Indy9.0.18开发的即时通信中出现这样一个问题:
平时运行都很正常,但隔两三天会出现客户端程序死掉的情况(没响应),去服务端看了下,连接是正常的(我在tcpServer的OnConnect事件中记录了客户端的IP和其他一些信息,服务端能正常显示刚连上来的客户端,所以连接应该是正常的),那么估计应该是客户端收不到服务端的信息,一直处在死等状态下,不知对否?
出现这种情况时所有客户端都会死掉,但只是重启一下服务就又都可以了(将TCPServer False后再重新激活)。
补充:
因为数据量不大,客户端用的是单线程。服务端建有数据库连接池处理并发的问题,服务端每个线程独占一个连接。
由于无法模拟这种死掉的情况,所以也不好跟踪,请各位大虾帮我分析下为何客户端会经常死掉,以及应该如何处理,不胜感激。
...全文
96 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
equn93 2009-09-27
  • 打赏
  • 举报
回复
问题已解决。。
是连接数据库有点问题。。
有时不稳定会自动断开。。
不过仍感谢各位的热心帮助。
结帖给分
justin_wkf 2009-06-02
  • 打赏
  • 举报
回复
應該使用短連接
equn93 2009-05-27
  • 打赏
  • 举报
回复
嗯。。
客户端发过来的数据并没写到服务端的日志里(只记录了客户端的一些信息),
只有在服务端详细记录日志试试看了,
不过还要等上两三天,也不知什么时候才出问题。
haitao 2009-05-27
  • 打赏
  • 举报
回复
【客户端需要调用服务端的方法时才去连接,得到结果后就断开与服务端的连接。】已经是短连接了。。。。。。。

日志能看到 收到客户端的数据吗?
以前测试socket的频繁使用,有时候发现个别连接对象里的socket句柄其实是空的!
equn93 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sz_haitao 的回复:]
哦,服务端时间长后,不再接受客户端的连接了?
或连接成功,但是不会响应客户端发送的任何数据?

——看服务端日志,是收到、接受客户端的连接了吗?
[/Quote]
服务端日志里可以看到收到客户端连接了

[Quote=引用 4 楼 luxuewei5214 的回复:]
有很多因素了,建议用时链接,即短链接
[/Quote]
短链接? 不懂呀。。 可否详解一下?


luxuewei5214 2009-05-27
  • 打赏
  • 举报
回复
有很多因素了,建议用时链接,即短链接
haitao 2009-05-27
  • 打赏
  • 举报
回复
哦,服务端时间长后,不再接受客户端的连接了?
或连接成功,但是不会响应客户端发送的任何数据?

——看服务端日志,是收到、接受客户端的连接了吗?
equn93 2009-05-27
  • 打赏
  • 举报
回复
客户端需要调用服务端的方法时才去连接,得到结果后就断开与服务端的连接。
haitao 2009-05-27
  • 打赏
  • 举报
回复
一直感觉delphi写这种服务型的24x7程序,是比较容易出现怪事。。。。。。。。也许原因是第三方控件,也许是string的使用,等等
所以考虑服务端实现尽量用delphi写isapi程序,通信由IIS来完成,delphi只做业务处理

具体这个问题,也许服务器定时给客户端(或仅仅是一段时间没有交互的客户端)发一个信号,如果没有回应,则自动断开那些客户端

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧