经过大量的搜索后,我认为Indy TCP服务器将是我正在使用的即时通讯服务器上最好的使用方式。我现在面临的唯一问题是向其他连接的客户端广播和转发消息,向同一个客户端发回响应似乎没问题,并且不会挂断其他客户端的活动,但是为了将消息转发给其他客户端,我知道的机制是通过使用aContext.locklist
,并在连接列表之间进行迭代来查找要接收数据的客户端连接。Indy 10 TCP服务器
这里的问题我认为它冻结了列表并且不会处理其他客户端请求,直到解锁列表被调用。那么它会不会损害服务器的性能?锁定列表并在连接之间迭代以转发每条消息(因为这是在Messenger中经常发生的事情)。有没有更好的方法来做到这一点?
我使用印10和Delphi 7
代码广播:
Var tmpList: TList;
i: Integer;
Begin
tmpList := IdServer.Contexts.LockList;
For i := 0 to tmpList.Count Do Begin
TIdContext(tmpList[i]).Connection.Socket.WriteLn('Broadcast message');
End;
IdServer.Contexts.UnlockList;
代码转发消息:
Var tmpList: TList;
i: Integer;
Begin
tmpList := IdServer.Contexts.LockList;
For i := 0 to tmpList.Count Do Begin
If TIdContext(tmpList[i]).Connection.Socket.Tag = idReceiver Then
TIdContext(tmpList[i]).Connection.Socket.WriteLn('Message');
End;
IdServer.Contexts.UnlockList;
您希望我们能够在心理上调试您的代码? – Barmar
对不起,我其实认为它是一个常见问题,而不是代码问题。 –