最近在开发一个网络TCP服务器的时候, 运行至后期客户端多时遇到一个效率问题.由于服务器端使用了TThreadList来保存客户端的socket句柄, 每次有客户端连接时,
TThreadList.add(nClinetSocket);有数据时,在发送TThreadList.lock;for i= 0 to count-1 do
begin
sendPack(XXXXXXXXXXXXXXX);
end;TThreadList.Unlock;
效率很低. 各位高手们, 有没有更好的机制提高这种效率呢, 既保证socket句柄的安全性, 又能提高效率.
TThreadList.add(nClinetSocket);有数据时,在发送TThreadList.lock;for i= 0 to count-1 do
begin
sendPack(XXXXXXXXXXXXXXX);
end;TThreadList.Unlock;
效率很低. 各位高手们, 有没有更好的机制提高这种效率呢, 既保证socket句柄的安全性, 又能提高效率.
解决方案 »
- 有人用过LibTiffDelphi吗?
- 谁有delphi开发中经常用到的几个单元的详细资料?
- 兄弟帮忙看看!机子为何老有病毒!
- 打印的问题。各位高手请进。
- socket传递字符串
- 请问Inno Setup 怎么写Autoexec.bat???
- 如给一个存储过程传递参数?
- 我下载不到badcopy pro正式版,只下了个评估版(evaluation version),所以明明修复好的文件确保存不了,真痛苦!不知哪位大虾肯相助?
- 四舍五入的函数是什么?
- 大家好,像OICQ一样在IE的工具栏中加入指定图标和主页的链接,怎么做呢?帮UP吧
- 菜鸟问题用query 查询后,日期类型的字段的问题。
- 如何得到纸张高度?
1、每个SOCKET开一个线程,类如INDY,每个服务器大概能支持到200-500左右;
2、使用完成端口,这个需要自己编码实现,每个服务器可以支持2000以上,当然具体效率还受限于IO和带宽。
TThreadList.lock;for i= 0 to count-1 do
begin
sendPack(XXXXXXXXXXXXXXX);
end;你这样做,就相当于是全串行。