|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
ServerSocket загрузка процессора
Есть простейший сервер чата. Работает на блокирующих сокетах.
При подключении к нему хотя бы одного клиента он жрет 30-40% прцессорного времени (даже в режиме ожидания), при подключении второго, третьего ... проценты почти не увеличиваются. Подскажите это так и должно быть или не правильно построен серевер. Основные процедуры ниже Кстати, клиент тоже потребляет около 15%. Могу выложить полный исходник. Код:
procedure TFormChatServer.ServerSocketGetThread(Sender: TObject; ClientSocket: TServerClientWinSocket; var SocketThread: TServerClientThread); begin SocketThread := TSCThread.Create(true, ClientSocket); SocketThread.Priority := tpLower; SocketThread.Resume; MemoDebug.Lines.Add('Создал поток для клиента - '+ClientSocket.RemoteAddress); end; procedure TSCThread.ClientExecute; var Zagolovok : TZagolovok; i : integer; begin try while (not Terminated) and (ClientSocket.Connected) do try if ClientSocket.ReceiveLength>0 then begin ClientSocket.ReceiveBuf(Zagolovok, SizeOf(Zagolovok)); if Zagolovok.ID=$2AA2 then begin case Zagolovok.Comm of 1: PrLogin; 50: PrMsg; end; end; end; except FormChatServer.MemoDebug.Lines.Add('Отсоеденился с ошибкой - '+ClientInfo.Login); ClientSocket.Close; Break; end; finally FormChatServer.MemoDebug.Lines.Add('Поток для клента убит - '+ClientInfo.Login); for I := 0 to Clients.Count - 1 do if TClientInfo(Clients.Items[i]^).Login=ClientInfo.Login then Break; Clients.Delete(i); FreeMem(ClientInfo); Terminate; end; end; |