关于客户端和服务器端 socket 长连接 ,重启一端后建立连接失败问题
发布于 10 年前 作者 wangbinlml 6962 次浏览 最后一次编辑是 8 年前 来自 问答

请教 @all 高手: 我的应用是双通道,如下: test1App: IP:192.168.0.20 发送端:port:9060 接受端:port:9050

test2App: IP:192.168.0.21 发送端:port:9050 接受端:port:9060 原理: test1App,test2App连接是双工的。 test1App 向test2App (192.168.0.21:9060)端口发送数据 test2App 接收到数据处理业务后向test1App (192.168.0.20:9050)端口发送数据(返回数据)

2端都是第一次启动时候:netstat 9050,9060信息如下: alex[[[@alex-PC](/user/alex-PC)](/user/alex-PC)](/user/alex-PC):~$ netstat -ae|grep 9050 tcp 0 0 *:9050 : LISTEN alex 18957646
tcp 0 0 localhost:9050 localhost:59874 ESTABLISHED alex 18968912
tcp 0 0 localhost:59874 localhost:9050 ESTABLISHED alex 18961687
tcp 0 0 localhost:59873 localhost:9050 ESTABLISHED alex 18961686
tcp 0 0 localhost:9050 localhost:59873 ESTABLISHED alex 18968911 alex[[[@alex-PC](/user/alex-PC)](/user/alex-PC)](/user/alex-PC):~$ netstat -ae|grep 9060 tcp 0 0 *:9060 : LISTEN alex 18961682
tcp 0 0 localhost:47324 localhost:9060 ESTABLISHED alex 18968909
tcp 0 0 localhost:9060 localhost:47323 ESTABLISHED alex 18961688
tcp 0 0 localhost:9060 localhost:47324 ESTABLISHED alex 18961689
tcp 0 0 localhost:47323 localhost:9060 ESTABLISHED alex 18968908
udp 0 0 *:mdns : avahi 9060

也就是说双方都建立链接。当我重启一个端(如:test1App)后,netstat 信息如下: alex[[[@alex-PC](/user/alex-PC)](/user/alex-PC)](/user/alex-PC):~$ netstat -ae|grep 9060 tcp 0 0 *:9060 : LISTEN alex 18961682
tcp 0 0 localhost:9060 localhost:47381 ESTABLISHED alex 18975280
tcp 0 0 localhost:47380 localhost:9060 ESTABLISHED alex 18976415
tcp 0 0 localhost:9060 localhost:47380 ESTABLISHED alex 18975279
tcp 0 0 localhost:47381 localhost:9060 ESTABLISHED alex 18976416
udp 0 0 *:mdns : avahi 9060

alex[[[@alex-PC](/user/alex-PC)](/user/alex-PC)](/user/alex-PC):~$ netstat -ae|grep 9050 tcp 0 0 *:9050 : LISTEN alex 18976408

也就是说没有重启那端跟刚重启的这端没有成功建立socket 链接。 9050这端接受不到9060发送过来的数据。

这是为什么呢???? 请高人指点。

连接池用的是:generic-pool 模块

3 回复

问题蛮详细的,但看不懂…

这不是因为没重启那端的pool中的TCP连接都已经失效了吗?你得有个心跳+重连的机制吧。

@bnuhero 恩恩,我试试。

回到顶部