ServerSocket.Socket.ActiveConnections的解析

huangshy85 2012-04-17 02:55:32
广发英雄帖,向高手求救:
ServerSocket.Socket.ActiveConnections的解析


背景:
我用TServerSocket开发服务器应用与客户端建立连接,在连接点数少的情况下,ServerSocket.Socket.ActiveConnections显示正常,当前有多少个用户连接就显示多少。过一段时间(10天左右)我重启应用是发现连接数有800多个,当时实际上已经没有用户连接了!非常困扰,求解!
...全文
409 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
orxor 2012-04-19
  • 打赏
  • 举报
回复
另开一个线程,轮询向每个客户端 发送一个包“你还活着吗”,客户收到后反馈“我很好”,然后如果服务端没有收到“我很好”,则认为这个客户断了,关闭这个客户。
huangshy85 2012-04-19
  • 打赏
  • 举报
回复
假如因网络掉包造成客户端没能正常接受到客户端反馈回来的信息,服务器就这样释放了资源会不会有问题?
山东蓝鸟贵薪 2012-04-18
  • 打赏
  • 举报
回复
你可以在客户端中设置参数,当数据库断开时,
再重新连接数据库即可
huangshy85 2012-04-18
  • 打赏
  • 举报
回复
socket.close方法无法自动释放已经分配的资源
mhhaifeng 2012-04-18
  • 打赏
  • 举报
回复
1 用keepalive方法 以keepalive为关键字网上查下
2 自定义 定期发送心跳包
比如每分钟发送一次 服务器 超时没有收到心跳包 就认为客户端已断开 然后自己socket.close;
huangshy85 2012-04-18
  • 打赏
  • 举报
回复
问题:
1.如何定期检测客户端是否存活?
2.目前我们的系统是架构在TServerSocket 上的,暂时改不了;能不能通过外部程式发送某个命令,然后服务端重新检查线程连接客户端是否在线?
huangshy85 2012-04-18
  • 打赏
  • 举报
回复
这个不连接数据库。
我现在是想让服务器Tserversocket自动释放无效连接的Connections。
使用心跳包的话,如何确定是哪一个Socket.Connections[i]呢?
orxor 2012-04-17
  • 打赏
  • 举报
回复
不是 TServerSocket 本身有问题,应为你没有处理客户端异常退出的问题,服务器接受不到客户断开的消息,所以一直等待。
解决方法:1.自己发送心跳包,定期检测客户是否存活。
2。用keepalive方法
ps:服务程序不要用 TServerSocket ,推荐OVERBYTE ICS
huangshy85 2012-04-17
  • 打赏
  • 举报
回复
TServerSocket 存在什么问题,本人刚刚接触,能否给一下您的笔记?

所谓网络不正常断开时socket.connection所占据的资源无法自动释放吗?因为程式在很多用户连接的过程中一段事件后会报内存溢出。
mhhaifeng 2012-04-17
  • 打赏
  • 举报
回复
TServerSocket 控件本身问题
需要自己close 无效socket
ServerSocket.Socket.ActiveConnections的值 不准确
特别是在网络不正常断开的时候

1,593

社区成员

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

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