<!--CodeS-->
function TfrmChatServerMain.SendPeerChatMsg( REP_CHAT_MES : TREP_CHAT_MES_NOR ): Boolean;
var
PeerList : TList;
nIdx : Integer;
UserInfo : TListUserItem;
RoomItem : TListRoomItem;
begin
try
Result := True;
RoomItem := GetRoomItem(REP_CHAT_MES.ROOMID);
if Assigned(RoomItem) then
begin
try
PeerList := RoomItem.USER_LIST.LockList;
UserInfo := nil;
for nIdx := PeerList.Count - 1 downto 0 do
begin
try
UserInfo := PeerList.Items[nIdx];
if Assigned(UserInfo.AThread) then
TIdPeerThread(UserInfo.AThread).Connection.WriteBuffer( REP_CHAT_MES, Sizeof(REP_CHAT_MES) );
Application.ProcessMessages;
except
TIdPeerThread(UserInfo.AThread).Stop;
end;
end;
finally
RoomItem.USER_LIST.UnlockList;
end;
end;
except
on E : Exception do
begin
AddLogError_Memo('SendPeerChatMsg Function Except Messsage :' + E.Message);
Result := False;
end;
end;
end;
<!--CodeE-->
위 코드는 브로드캐스팅 메세지를 날리는 부분입니다..
그런데 제가 부하테스트할 겸 테스트 프로그램을 만들어서 돌린 결과...
100개 정도를 동시에 날리면 제대로 처리되는것 처럼 보이는데...
개수가 늘어날 수록 꼭 블로킹 된것처럼 보이네요....물론 메세지는 다 옵니다..^^;
혹시 이 방법 말고 다른 방법으로 처리할 수는 없나요??
Application.processMessage는 그냥 넣어본것입니다...
참고로 테스트 프로그램은 루프 돌면서 쓰레드 수만큼 서버에 접속해서 메세지를 뿌리는 방식입니다..