我现在为公司的网关程序作一个测试程序,这个测试程序就是创建大量的客户端(ClientSocket),然后连接同一个服务器(ServerSocket)。现在有几个问题想问一下:1.ClientSocket采用非阻塞模式时,当创建了少量的ClientSocket时,基本没有问题。当创建了几百个ClientSocket后,与ServerSocket频繁通信时,有时就会报“Socket Error 10053”等错误。我觉得这可能是读写超时造成的,对于这种模式,有什么办法可以解决?2.ClientSocket采用阻塞模式时,我把ClientSocket作为TThread的子类的一个私有成员来用,目的是想用多线程技术来提高效率。但效果不明显,并且在TThread的Execute过程里,处理Clientsocket的读和写(通过TwinSocketStream)有问题,我在用TwinSocketStream读写前,先用它的WaitForData判断,可老是返回False,我已经从服务器给它发数据过来了。首先想问,我创建了几百个Thread可取吗?另外,哪位大侠可以提供一些阻塞模式+多线程的源代码,我将不胜感激!
我的信誉值比较低,你们不要认为我不给分,那是因为我有一次不慎移贴的后果。
我的信誉值比较低,你们不要认为我不给分,那是因为我有一次不慎移贴的后果。
解决方案 »
- 怎样从mpg4视频文件中截图和截取一段视频?求助!!
- 关于delphi DBgrid的一个小问题!求解!
- 大虾帮忙看看http://expert.csdn.net/Expert/topic/2556/2556311.xml?temp=1.432437E-02
- 串口通迅,运行一段时间出现Stack Overflow错误,为何?
- Tquery组件的问题?
- 这教下面的程序我那里出错了.谢谢
- 我想用treeview来做一个类似windows的资源管理器的树形目录,求算法
- 谁能推荐几本Delphi的好书??
- 关于的InstallShell问题(送分)
- 求教,在form:=Tform.create(application) 时报'form resource not found'
- 请问在哪儿能找到TMemo控件源码
- 关于Scoket编程的问题!
http://community.csdn.net/Expert/topic/3704/3704438.xml?temp=.6811487
这种异步选择IO模式优点是不需要多线程,弱点是因为它使用了WINDOWS消息,于是它将受到
WINDOWS消息队列长度的限制,,它不适应服务于太多客户端。当采用普通的多线程阻塞方式时,每个连接必须对应一个线程,数百个线程本身已经会耗掉大量内存
和CPU资源,它也不适合太多客户端。。使用TwinSocketStream其实是使用的SOCKET的select IO模式,关于它的问题可以查相关SELECT函数
的使用资料。
使用少量线程服务于大量SOCKET连接,可以使用完成端口(IOCP)模式。
var
Stream: TWinSocketStream;
B: Array[0..1023] of Char;
S: String;
begin
{ Place thread code here }
Stream := TWinSocketStream.Create(FClientSocket.Socket, 10);//FclientSocket已正确连接和设置
while (not Terminated) and (FClientSocket.Active) do
begin
if Stream.WaitForData(10) then
begin
//写数据到服务器
stream.write(S, Length(S)); //假定S中已有了要发送的数据
//从服务器读数据
FillChar(B, 1024, 0);
stream.Read(B, 1024);
end;
end;
end;请问,我这样写对吗?有需要改进的地方吗?
~~~~呵呵。。0.01秒? 这时间设得也太短了吧