关于tcp最大连接数,tcp客户服务器的通讯机制,以及ipx,tcp,udp协议比较的3个问题(300分)

盛利

Unregistered / Unconfirmed
GUEST, unregistred user!
问题比较多,一个问题100分吧!
1.用socket写的tcp服务器最大可以支持多少连接,我知道是跟服务器的性能有关,但是在
大虾,你的经验中,什么配置的服务器支持了多少客户连接,服务器运行稳定,我就想知道
这样的数据,另外如果服务器的操作系统用win98行不行,能支持多少连接
2.关于通讯机制,socket写的tcp服务器,怎么跟下面的若干个(几百个甚至几千个,取决于
问题1.)客户通讯,总不能自由通讯吧,假如几百个客户端同时往服务器发数据那不堵塞啊,
那么怎么办呢,我的一个想法是让服务器一个一个循环问客户端,问了客户,客户再返回数
据,这只是我的想法,没有在实际中用过,那么大虾你在你的什么系统中,采用什么样的通讯
机制,服务器运行稳定,网络通畅,通讯及时.
3.如果服务器和客户端通讯也就是10多个字节的量,我用tcp好还是udp好,当然udp要加验证
的,什么原因呢,你在什么系统中用的是什么方式能告诉我吗?
另外我看网吧管理软件美萍能管理上百个客户端,他用的是ipx协议,什么道理,tcp或者udp
能不能比ipx做得更好?
 
1.socket写的理论上当然是可以连接N个客户端了,但实际上有出入,这和你的程序,服务
器的性能有关。一般主流的NT Server连个5,6百个客户应该没问题。用win98做服务器!!!
好象从来没听来,那样你等着用户骂你吧!
2.大量客户一般建议用多线程处理,但还要用点技巧,比如每隔一断时间让客户发个消息通
知服务端,超时则释放这个客户端,还有很多技巧。
3.这要看你对数据完整性的要求,如要求较高,还是用tcp吧?udp不是很可靠。
4.网吧管理一般都在本地局域网,局域网处理方式和internet有很多不同,不能一该而论
 
1.win98不行,只能支持64个客户连接。
一般 NT/2000/XP(包括 Home版)上 连接数是可估算的,
Max(N) = 非交换物理内存 / 平均单连接占用内存
非交换物理内存 一般为物理内存的 1/8;
平均连接占用内存 用一般编程技术约10K(基本2K + 4K Buffer_IN + 4K Buffer_OUT)
一般256M内存的机器可连 3~4000个 Client
用 Winsock 底层的 Overlapped I/O 技术可以大大降低每连接占用。
连接数可达 1~20000!!(关于准确得估算公式我另外还有详细的资料)
本人就用 Delphi 写过基于OverlapIO的服务器,平时在线达5万(全国有200个服务器):)
2.关于机制,你不用担心,其实在时间切片上总有先后的,操作系统会把用户的连接和请求一个一个排队缓存的(其实在网卡、路由器上数据包就已经是排队的)。
收到请求后根据处理的耗时程度可分几种模式:
1。如果能立即处理(内存、本地磁盘、CPU)且服务器单CPU,一般用非阻塞轮循效果最好。
2。如果有耗时等待操作(如数据库查询)或者多CPU,一般可以用线程阻塞和线程池两种模式,
本人推荐线程池模式(ServerSocket支持这种模式)!!早期的unix服务程序喜欢用线程阻塞(Delphi里的 Indy和它的前身 Winshoe就是),但线程阻塞要开太耗资源,效果不好。
3。Windows的消息机制,从本质上与1是相同的,现在的控件多是这种模式(ICS,ServerSocket)。
4。Winsock2中有了OverlappIO其实也不是一种单纯的模式,也有我比较喜欢其中的 CallBack 模式。
3.如果数据量大用 TCP 可靠,就服务器设计而言, UDP 由于不保存连接状态,
所以可以支持超大客户量,多于10个字节并体现不出来哪种好,但UDP通讯包最好小于512字节,QQ就控制了包大小。
ipx协议在局域网挺方便的,尤其是支持广播,在 Winsock 里编程也很简单,我就做过 Dephi 的 ipxServerSocket/ipxClientSocket控件,
属性/事件与 Delphi 里的 ServerSocket/ClientSocket 一模一样。:)
 
你上面指的是200个服务器加起来的用户加起来有5万吧?是盛润的吗?
好象我没听说过有哪个股票行情软件有这样大的市场占有率!!!!!!!
Overlapped I/O 技术是什么?我没用过,在delpi有介绍吗?
是不是指winsock底层的api啊?
我也做过股票行情软件,前端我写的还可以,后端我写得不是很成功,所以想了解一把
 
另外,服务器开发主要有3大瓶颈:
1.资源(TCP连接数)
2.算法(CPU占用率)
3.协议(带宽占用)
我们的单服务器负载出现2000~3000人是很平常的事,而内存/CPU/网络远远没有饱和
我在我开发的笔记本上就做过万人级的压力测试:)
呵呵,盛润占有率好象不算高哦~~
楼上这位兄弟你的客户端是用 Delphi 做的吗?
我以前也做客户端的:)
 
首先,十分感谢轻松虎,还有其它几位朋友,
目前我的软件只需要运行在局域网上,听了上面所说的能连接那么多客户端,我想对于
我的软件来说足够了,当然不够还可以增加服务器.
再有,我的软件服务器和客户端如果用udp进行通讯的话,用怎么个机制比较好,由于我没有
这方面的经验,希望能听听别人的意见,再加上我的实践,希望能摸索出一个好的办法.
服务器只是需要得到客户端提供的数据,但是要得到那个数据根据服务器发送的客户端
的命令解释得到,数据的及时性要求不是太高,2-3s应该可以接受的
 
高人
听课。
 
轻松虎, 我的QQ:822154,可以和你联系吗?
还想向你请教很多问题!
 
我的QQ:3197541
 
多人接受答案了。
 
高人
听课。
 
顶部