300分在线等!在做(TCP/IP)服务器程序中所遇到的難題(希望有经验的人士一些解决方案)(200分)

  • 主题发起人 主题发起人 wx_ham
  • 开始时间 开始时间
线程池有没有自己写过的啊?
TheadPool找不到相关的资料。
那TThreadList是用来干什么的呢,是用来做线程池的吗,如果不是的话,那是用来做什么的呢?
管理线程列表???
 
ThreadPool是线程池
TIdThreadMgrPool是INDY的线程管理,
他的(客户端)线程管理常用的有两个: TIdThreadMgrDefault和TIdThreadMgrPool,其中
TIdThreadMgrDefault是一般的(客户端)线程管理控件,而
TIdThreadMgrPool是(客户端)线程池管理控件,选择它就不必在每次的(客户端)连接断开地时候释放资源,而是将没有的资源放到Pool,等待下次客户端的需求。
其实这两个控件使用非常简单,只需要在IdTcpServer的ThreadMsg选择相应的管理就可以了。
private
FIdTCPServer: TIdTCPServer;
FIdThreadMgrPool: TIdThreadMgrPool;
.....

implementation

Create.....

FIdThreadMgrPool := TIdThreadMgrPool.Create(Self);
FIdTCPServer := TIdTCPServer.Create(Self);
FIdThreadMgrPool.PoolSize := 10;
FIdTCPServer.ThreadMgr := FIdThreadMgrPool;

.....

Destroy.........

FreeAndNil(FIdTCPServer);
FreeAndNil(FIdThreadMgrPool);

------------------------------------
TThreadList只是一个TList的派生类,特点是有了LockList,线程安全
 
希望兄弟有空换这个看看十分符合你的需求啊 HOHO
安全UDP类,来顶替你的TCP:)
还在完善阶段。正好你可以帮偶做点实际测试:) http://www.delphibbs.com/delphibbs/dispq.asp?lid=3476934
 
绝招:给分,您要tcp的,没其它了;

小数据时,主要是因为tcp发送延时造成的;

'   Winsock的Nagle算法将降低小数据报的发送速度,而系统默认是使用Nagle算法;
bNodelay = 1
lRet = setsockopt(WskHan, &H6&, &H1&, bNodelay, 4)
If lRet = 0 Then jkSetWsk_Tcp_NoDelay = True

'查询是否设置成功
'bNodelay = 0
'lRet = getsockopt(Wsk.SocketHandle, IPPROTO_TCP, TCP_NODELAY, bNodelay, 4)
 
这个是VB的?

寒...
 
To:VictorWoo
我说的不是INDY自带的线程池,我是想自己写一个线程池来管理服务器端的Socket端。
 
To:金卡绣球jk8.com
以前对你说的这个Nagle算法不是很了解,
今天在网上查了一下Nagle算法,了解了一点点:仅仅局限于该算法在发送小量数据(小于1400)时会影响处理速度。
但是具体还不是很清楚,能不能说具体一点。
function setsockopt(s: TSocket; level, optname: Integer; optval: PChar;
optlen: Integer): Integer; stdcall;
function getsockopt(s: TSocket; level, optname: Integer; optval: PChar; var optlen: Integer): Integer;
 
建议找几个源码看看!
 
To:mmzmagic
呵呵,看了一下,我也觉得不错,但是我这种需求,你那一套是否能满足呢?
N多个不丗网段的客户端连到服务器上去,服务器要将数据传到不同网段的用户。

还有你说的那几个BUG现在解决得怎么样了啊?
 
其实一点不懂delphi,不过一点都不影响赚专家分;

不过这个是winapi 呀,D里边应该可以用的吧;(To:VictorWoo ,不 寒 了吧,呼呼)

对于大小数据量都是管用的,你不可能说每次发的都是大数据,况且是socket发的(不是说你要它发多少),不知道了吧;

放心,这个我一直用,爽得很;

其实indy里也有这个属性的;

查询的时候 bNodelay (var optlen: Integer)会返回 1 ,就 ok 了
 
Nagle算法是指针对Socket同步编程下面应用的吧?
在异步编程下应该没有关系吧
 
后退
顶部