Socket通讯,如何让客户端一直保和连接状态

时间:2022-10-13 23:55:54
服务器端是多线程的程序,每次有连接请求服务器会开一个线程处理请求,如果客户端不发送断开连接请求,服务器上的这线程一直会开着。
我要做的是客户端,客户端每隔30秒给服务器发送一次消息,我现在每次发完消息后就关闭客户端的Socket,有什么方法可以让客户端一直连着吗,TcpClient不关闭就可以了吗?如果TcpClient不关闭,下次再发消息到服务器端是,服务器端还是由原来的线程处理吗。

13 个解决方案

#1


Socket的长连接问题的解决

http://blog.163.com/zhu_xude/blog/static/116769216200962965349372/

#2


帮顶下.....

#3


当然可以不关闭,你自己去试验。

我想你也还不知道为什么要关闭连接(既为什么要短连接)。所以此时也没有什么可跟你说的,因为你不做测试,或者说你的应用本来就是自己玩,所以很很难谈到产品设计需要什么通信架构问题。

例如你做一个类似迅雷那样的客户端软件,连接你的服务器(哪怕只是取得其它客户端的位置信息这个简单的操作),客户端上可能有不只是迅雷软件、还包括其它软件都需要访问同一个服务器,客户端可能随时发起几十个连接并发地访问服务器不同服务。客户端可以从全世界任何地点访问服务器。你搞清楚你的产品需要什么架构了吗?

#4


长连接主要适合的是电信级、服务器和服务器之间的通信,适合无之流的大江大河式的,而不适合海纳百川那样的网络需求。

#5


引用楼主 xiaoxia1899 的回复:
如果TcpClient不关闭,下次再发消息到服务器端是,服务器端还是由原来的线程处理吗。

你的服务器回复信息吗?回复完信息继续读、然后继续回复信息不就得了,还用得着去担心什么“原来的”线程吗?

#6


引用 3 楼 sp1234 的回复:
当然可以不关闭,你自己去试验。

我想你也还不知道为什么要关闭连接(既为什么要短连接)。所以此时也没有什么可跟你说的,因为你不做测试,或者说你的应用本来就是自己玩,所以很很难谈到产品设计需要什么通信架构问题。


这个我们公司的一个网站项目,是一个为店家提供在线预定服务,商家登陆后,每隔30秒项服务器发一次消息询问有无新订单,服务器返回相应的消息。
我是第一次做通讯,所以一点头绪都没有,能给个例子吗

#7


引用 5 楼 sp1234 的回复:
引用楼主 xiaoxia1899 的回复:
如果TcpClient不关闭,下次再发消息到服务器端是,服务器端还是由原来的线程处理吗。
你的服务器回复信息吗?回复完信息继续读、然后继续回复信息不就得了,还用得着去担心什么“原来的”线程吗?


因为项目要求  服务器端要验证用户信息,在第一次登陆成功后,服务器线程就线程就会添加一个标志提示是登陆用户,直到客户端发消息提示用户推出,服务器将杀掉这个线程。
如果服务器端不是同一个线程,那么每次发消息都要对用户信息进行验证,这样开销很大

#8


自己顶.........

#9


还是30秒连接一次服务器好........不要一直保持着连接,保持长连接会因为网络原因或者连接数过多而自动断开的...

#10


当你连接上后,就不用管它是什么连接
在你需要数据的时候,可以检查一下连接的状态
相信你应该知道怎么做了吧!

#11


引用 9 楼 wxm3630478 的回复:
还是30秒连接一次服务器好........不要一直保持着连接,保持长连接会因为网络原因或者连接数过多而自动断开的...


但是我们的项目组长不同意,服务器端是请人使用Java不会再改动了,只能在客户去实现。

#12


发送信息后不关闭连接,这个应该可以做的到的

#13


引用 12 楼 s314324153 的回复:
发送信息后不关闭连接,这个应该可以做的到的

我自己做了简单的测试程序,是可以实现。但是服务器端是没有使用多线程。所以有些效果还是测不了。

#1


Socket的长连接问题的解决

http://blog.163.com/zhu_xude/blog/static/116769216200962965349372/

#2


帮顶下.....

#3


当然可以不关闭,你自己去试验。

我想你也还不知道为什么要关闭连接(既为什么要短连接)。所以此时也没有什么可跟你说的,因为你不做测试,或者说你的应用本来就是自己玩,所以很很难谈到产品设计需要什么通信架构问题。

例如你做一个类似迅雷那样的客户端软件,连接你的服务器(哪怕只是取得其它客户端的位置信息这个简单的操作),客户端上可能有不只是迅雷软件、还包括其它软件都需要访问同一个服务器,客户端可能随时发起几十个连接并发地访问服务器不同服务。客户端可以从全世界任何地点访问服务器。你搞清楚你的产品需要什么架构了吗?

#4


长连接主要适合的是电信级、服务器和服务器之间的通信,适合无之流的大江大河式的,而不适合海纳百川那样的网络需求。

#5


引用楼主 xiaoxia1899 的回复:
如果TcpClient不关闭,下次再发消息到服务器端是,服务器端还是由原来的线程处理吗。

你的服务器回复信息吗?回复完信息继续读、然后继续回复信息不就得了,还用得着去担心什么“原来的”线程吗?

#6


引用 3 楼 sp1234 的回复:
当然可以不关闭,你自己去试验。

我想你也还不知道为什么要关闭连接(既为什么要短连接)。所以此时也没有什么可跟你说的,因为你不做测试,或者说你的应用本来就是自己玩,所以很很难谈到产品设计需要什么通信架构问题。


这个我们公司的一个网站项目,是一个为店家提供在线预定服务,商家登陆后,每隔30秒项服务器发一次消息询问有无新订单,服务器返回相应的消息。
我是第一次做通讯,所以一点头绪都没有,能给个例子吗

#7


引用 5 楼 sp1234 的回复:
引用楼主 xiaoxia1899 的回复:
如果TcpClient不关闭,下次再发消息到服务器端是,服务器端还是由原来的线程处理吗。
你的服务器回复信息吗?回复完信息继续读、然后继续回复信息不就得了,还用得着去担心什么“原来的”线程吗?


因为项目要求  服务器端要验证用户信息,在第一次登陆成功后,服务器线程就线程就会添加一个标志提示是登陆用户,直到客户端发消息提示用户推出,服务器将杀掉这个线程。
如果服务器端不是同一个线程,那么每次发消息都要对用户信息进行验证,这样开销很大

#8


自己顶.........

#9


还是30秒连接一次服务器好........不要一直保持着连接,保持长连接会因为网络原因或者连接数过多而自动断开的...

#10


当你连接上后,就不用管它是什么连接
在你需要数据的时候,可以检查一下连接的状态
相信你应该知道怎么做了吧!

#11


引用 9 楼 wxm3630478 的回复:
还是30秒连接一次服务器好........不要一直保持着连接,保持长连接会因为网络原因或者连接数过多而自动断开的...


但是我们的项目组长不同意,服务器端是请人使用Java不会再改动了,只能在客户去实现。

#12


发送信息后不关闭连接,这个应该可以做的到的

#13


引用 12 楼 s314324153 的回复:
发送信息后不关闭连接,这个应该可以做的到的

我自己做了简单的测试程序,是可以实现。但是服务器端是没有使用多线程。所以有些效果还是测不了。