Socket tcp通信,多线程实现的高级问题
基于socket的tcp通信服务器程序,该程序用于GPS车辆监控系统的数据传输。
定位信息传输通过udp实现,这个没问题。
现在设置,控制命令需要通过tcp通道来发送确保车台终端能正确,及时响应。
s.Bind(ipe);
s.Listen(5);
while (true)
{
socket temp = s.Accept();
........
}
s.Accept();在接受到车台终端的连接后会返回一个新的socket temp来建立与该车台的通信通道
我现在的思路是,为每一个新的连接socket temp,都开辟一个线程来维护该终端的数据收发。
但是,如果有50个终端同时连接就要创建50个线程,如果更多呢,这样应该会有问题吧。这个问题有什么好的解决
办法,。一般,同时几十个连接时是怎么进行维护的。
请知道朋友提供个设计思路。
还有个小问题,连接断开怎么进行判断。
------解决方案--------------------异步就好了。
同步量一大是不现实的。
------解决方案--------------------通信大全参考
------解决方案--------------------如果有50个终端同时连接就要创建50个线程,如果更多呢,这样应该会有问题吧。这个问题有什么好的解决
别说50,就是500也行,效率问题不用担心,普通的单核电脑都能抗上百的连接...
最好使用多线程模式,其他模式的,我还没有使用过,不好评价.
------解决方案--------------------去看看IOCP的内容,这个是少量线程应付多连接
------解决方案--------------------代码太简洁,有点不太明白
------解决方案--------------------再弄个线程池。
------解决方案--------------------同步的。数据收时创建,发完数据就销毁并不影响你连接啊?只处理并发数据
不知道这样能不能减少你的线程数。。。
------解决方案--------------------
------解决方案--------------------看需求是需要使用长连接
这样的话,一个连接过来理解为一个用户,这样需要队列来管理这些用户
每个用户可以进行收发数据,使用同步异步,各有千秋
同步对线程和数据收发超时控制起来方便些
异步编程容易。
------解决方案--------------------最后一个问题,使用心跳包解决
客户端发送心跳,服务端检测,一定时间没有收到,则认为连接断掉,主动断开连接
------解决方案--------------------如果担心线程数量太多,则可以通过提高硬件配置,比如使用8核的服务器,也不贵了,IBM都才1-2万多.
另外一个就是采用短连接方式,每个线程只接收一次消息处理,完成应答后就立即销毁.
------解决方案--------------------学习了,不过我感觉楼主这种情况用异步还是比同步好
------解决方案--------------------感觉还是同步比较适合楼主的应用
------解决方案--------------------服务器端如果并发量大用c#是不合适的,用C++ Builder编写完成端口是好方法。
------解决方案--------------------并几百个线程,没有问题,再多,就不好了,可以考虑一下,完成端口
------解决方案--------------------只要代码写得质量还行,几十个线程对于现有主机来说,根本算不上什么大的压力
一般来说,只有达到上千个线程的规模,才会必须考虑使用线程池来提高性能,否则从编程简单化的角度来说,是可以开多个线程得