我要编一个同时处理3000个连接的Tcp服务器,求教! ( 积分: 200 )

  • 主题发起人 主题发起人 fzbxh
  • 开始时间 开始时间
F

fzbxh

Unregistered / Unconfirmed
GUEST, unregistred user!
希望大家在这次交流中提到以下问题:
1.完全端口技术
2.多线程TCPSERVER处理数据
3.如果客户端非正常关闭,如拨网线,服务器端是接收不到的,出错时怎么处理
3.客户端连接后,直接会发送一个唯一的编码,服务器端按此编码查找要向此连接不定时的发送数据,但要注意客户端的IP地址重覆问题,编码是不重覆的
4.3000个同时在线的客户端交流数据最快的方案,如多台电脑作服务器,集群技术等
5.windows2000 Server还是Linux作为TCP服务器好?
 
希望大家在这次交流中提到以下问题:
1.完全端口技术
2.多线程TCPSERVER处理数据
3.如果客户端非正常关闭,如拨网线,服务器端是接收不到的,出错时怎么处理
3.客户端连接后,直接会发送一个唯一的编码,服务器端按此编码查找要向此连接不定时的发送数据,但要注意客户端的IP地址重覆问题,编码是不重覆的
4.3000个同时在线的客户端交流数据最快的方案,如多台电脑作服务器,集群技术等
5.windows2000 Server还是Linux作为TCP服务器好?
 
我也关注这个问题,有没有经验的人讲一下思路
 
张无忌,ego碧落,淡水河,Borton都是高手了……请教他们!
 
留个联系方式吧, 我帮你解决!
 
我也想知道,LEABER,我的QQ:1230358
 
看看完成端口技术
 
4月份刚做了tcp在3000+的并发处理
1.可以参考《WINDOWS网络编程技术》这本书(有电子版和源码)以及www.codeproject.com上面的WinsockIOCP例程,前者比较基础,后者涉及到许多完成端口所用的技巧,很实用
2.一般使用当前系统的cpu个数×2的线程数(保证任一个cpu不会空闲且线程切换尽可能的少,效率比较高)来对完成端口中已经完成的接受数据进行处理
3.c-s之间必须定时保持数据通信,如果没有其他数据通信那就需要自己写个链路检测(例如每30秒向服务器发送一个链路检测信息),服务端收到客户端上行的任何类型数据,就更新该socket相应的一个时间戳属性(自己加的)为当前时间戳;另外开一个线程PurifyThrd,定时检测所有socket,发现有某个socket的最后通信时间戳和当前时间的差相差超过n秒(例如300秒),就认为该socket已经意外断开了,然后CancelIo()并CloseSocket()该socket就行了。注意在一些可能出现访问冲突的地方用临界区进行保护
3.客户端尽管ip可能相同,但是ip+port是肯定不会相同的,所以不必担心
4.关注这个问题
5.3000在win2ksvr上基本能撑住,不过要看你服务器配置,我服务器是 至强×2+2G内存,cpu占用率得看你数据量的频率及大小(复杂程度)
 
关于所说的客户端非正常关闭,如拨网线,服务器端是接收不到的,出错时怎么处理

多开一个线程判断超时就可以了。
 
关于
3000个同时在线的客户端交流数据最快的方案,如多台电脑作服务器,集群技术等

我认为速度不是问题,但是带宽才是问题。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3084436

和我的问题类似 ,关注
 
完成端口
 
islet8 兄,一看就知道你以前做过!但你总结的有些不妥:
2.一般使用当前系统的cpu个数×2的线程数(保证任一个cpu不会空闲且线程切换尽可能的少,效率比较高)来对完成端口中已经完成的接受数据进行处理
这种说法不当!

发现有某个socket的最后通信时间戳和当前时间的差相差超过n秒(例如300秒),就认为该socket已经意外断开了
这种不正确,断不断socket有明确的东西
 
等待北伐消息!
 
to 13708782004
这种不正确,断不断socket有明确的东西,有什么明确的东西?
请详细说明一下好吗?
 
我也想知道,有个类似的问题
 
后退
顶部