专业选手的问题:TServerSocket 的讨论(200分)

  • 主题发起人 主题发起人 andin
  • 开始时间 开始时间
A

andin

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在正在作一个 C/S 结构的通信程序,同时在线的客户端个数大约为1000个,客户端的
网络速度可能差别很大,例如:有拨号用户,也有宽带用户。
在以上这样的前提条件下,TServerSocket的ServerType应当设置为stThreadBlocking还是stNonBlocking
呢?如果设置为stThreadBlocking模式,那么,每一个连接,Server端会自动创建一个线程,
这么多的线程同时在运行,机器能行吗?如果设置为stNonBlocking模式,那么,因为所有的
通信程序都是在一个线程里运行的,这样,会不会导致窄带用户影响宽带用户?
看看各位专业选手,有何高见?
 
看看能够成为专业选手吗
 
还是用Threadblocking吧,用户多可以升级机器
nonBlocking不好用,特别是对于多个客户端的情况
建议你试一下idtcpServer和idTcpClient
他们封装了tserversocket和的threadblocking模式
不需要自己写线程,比较方便,要例子我这里有一个
留mail即可发给你
 
谢谢 Tassadar 的好意。我提出这个问题,主要是想讨论:
开发服务器端程序时,从性能的角度来看,究竟用什么Socket模式最好?而不是关心哪个
厂家的控件好,就我所知,可以有以下几种模式供选择:
1. Blocking模式;
2. 基于Windows消息机制的异步选择模式;
3. 重叠I/O;
4. 完成重叠I/O;
 
与这个问题相关的另外一个问题就是:选择什么样的线程模型?目前有这么几个模型,供我
选择:
1.整个服务器程序只有二个线程:主线程负责监听;工作线程负责循环发送或读取各个Socket
连接数据;
2.每个 Socket 连接提供一个独立的线程;

那么,从性能的角度来看,选择哪一个线程模型更为合适呢?
 
1000个用户还是用其他方式比较好,我建议你用WSAEventSelect,一个线程等待63的
TSocket,或者用callback函数加重叠I/O这样就可以用很少的线程解决大量的连接,
这样效果更好!
 
异步模式就只有2个线程???服务器端在一个线程里给所有连结用户循环发送数据?那万一一个消息发送错误,
消息队列中其他等待的消息不是没法发送了么?微软会这么弱智???哈哈,Unix别装神秘了,异步模式是革命
性的进步!!!好好去研究一下微软的异步模式吧!
 
后退
顶部