經過大量的搜索後,我認爲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
對不起,我其實認爲它是一個常見問題,而不是代碼問題。 –