Q&A

  • 인디 BroadCasting 할때 문제점..
<!--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는 그냥 넣어본것입니다...

참고로 테스트 프로그램은 루프 돌면서 쓰레드 수만큼 서버에 접속해서 메세지를 뿌리는 방식입니다..

0  COMMENTS