打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
XE2做的Android应用服务程序产生大量的TCP死连接,如何清除?
最近用 XE2的 DataSnap功能开发了一个Androrid应用服务程序,采用http协议。在使用过程中发现一个问题,如果手机没有正常退出,在服务器上就会出现大量的TCP死连接,而这些死连接却不有被操作系统清除掉。当死连接越来越多时,导致服务程序的线程无法释放,并且大量的内存。这样新的手机程序无法再登录。如何能解决这些TCP死连接呢?

修改服务器上的KeepAliveTime设置。

tcp协议,在三次握手成功即表示连接建立,之后若一方异常断开而没有通知对方,也就是没有主动断开连接。那么另一方是不知道的,他以为对方一直还在。
winsock为了解决这个问题提供了一个keepalive的参数设置项,可以用来设置在tcp层每隔一段时间发送心跳数据来探测对方是否还在,如果不在,socket的发送和接收函数会返回响应的错误。因此你只要设置这个参数,然后再发送或接收的时候处理错误即可。

当然你也可以不使用这个参数项,而自己在上层的协议中加入心跳保活机制,当然也就需要你自己处理和设计相关的协议了。

如果你只是使用socket控件而不知其所以然,以及控件的具体实现,那你很难处理这个问题。

socket的TCP keep-alive默认是关闭的,需要自己调用WSAIoctl(dwIoControlCode参数为SIO_KEEPALIVE_VALS)或者setsockopt(level参数为SO_KEEPALIVE)来启用。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
tcp对连接断开的感知
Linux内核 TCP/IP、Socket参数调优
TCP连接中网络断开后重新连接后的状态
netstat命令
UC头条:接地气讲解TCP协议和网络程序
热门技术中的应用-微服务中的相关协议1-RPC:远在天边,近在眼前
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服