完成端口(100分)

F

fghyxxe

Unregistered / Unconfirmed
GUEST, unregistred user!
本机测试: 当客户不停的连接服务器,连接数达到3967时.服务器总要等上一段时间才能再响应客户端,请问如何解决?
 
已经到最大了,一般都只能达到2000-3000个连接(即使是最简单的连接) ,分服务器吧. (原因可能是机器的内存/cpu切换线程时间累计过大了),多参考相关其他非delphi语言的资料.
 
这个跟机器性能。程序性能都有关系了。
如果只是测试能同时连接多少SOCKET,远不是这个数。
这个跟DELPHI也没什么关系。
 
贴个客户端的代码.
for (int i = 0;
i != -1;
i++ )
{
CTCPClientSock sock;
string s = "JsdlfkjLdjsfljs1j0s9dfjsdfksjkkkkkkkkkkkk" + string( itoa(i, a, 10) );
sock.ConnectToSrv("127.0.0.1", 4567);
sock.SendString(s);
//sock.SendString("第二次发送");
}
照理说: 服务器的处理过程应该是: 客户连接->数据处理(现在并没有处理,直接显示出来)->断开连接
但是在测试时发生,有时是N多个连接一起来,数据处理之后,等了一段时间才断开连接的.我想这可以跟在同一台电脑上测试有关系.
我想就是想测试能同时连接多少SOCKET.
 
本机测试: 当客户不停的连接服务器,连接数达到3967时.服务器总要等上一段时间才能再响应客户端,请问如何解决?
此时服务器CPU跑到多少 了?如果CPU不高,说明程序有问题,效率有待改进。
可以加我QQ,4463776
 
嗯...那个最大连接数的问题我解决了..是并发连接数太多的原因.
但是又有一个新的问题.是这样的: 当客户端断开的时候,服务器要关闭此socket.我是这样处理的:
shutdown( pKey->sClient, SD_BOTH );
if ( !DisConnectEx( pKey->sClient ) )
{
closesocket( pKey->sClient );
pKey->sClient = CreateSocket();
}
这样做程序连一直工作着.但是内存却会慢慢的增大.当我把
pKey->sClient = CreateSocket();
删除掉.内存就不会再自增(程序会先创建N多个socket,在N之前.它工作的很多.).
所以应该是创建socket时花费了系统资源.
但我有closesocket.却不见内存回收的?
内存一直在长.估计运行不了多久就挂了..
注:
我电脑上的 DisConnectEx 无法使用.
 
pKey中的资源要释放,重叠中东西也要释放。工作线程中要相当仔细。
 
互相学习,2ccc里面我上传了一个修改版本(别人的)控件,是免费的,做得不错
 
基本上稳定了..测试大量短连接没问题.还在测试中.....
 
顶部