Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2009, 16:49   #1
daxter
 
Регистрация: 22.04.2009
Сообщений: 4
По умолчанию 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;
daxter вне форума Ответить с цитированием
Старый 26.08.2009, 15:25   #2
daxter
 
Регистрация: 22.04.2009
Сообщений: 4
По умолчанию

помогите кто-нить. как с этим боротся.
я кстати ошибся. при подключении каждого клиента сервер жрет по 25%
итого всего при трех клиентах 75% процессорного времени. разве это нормально?

Есть вот такой демо чат на инди. там тоже самое
http://www.eonclash.com/downloads/Indy10Chat.zip
daxter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по ServerSocket. maks448 Работа с сетью в Delphi 3 29.04.2009 08:56
Serversocket,clientsocket prizrak1390 Работа с сетью в Delphi 10 21.04.2009 16:04
Загрузка процессора Syred Общие вопросы Delphi 1 12.06.2008 22:15
Загрузка процессора Terran Общие вопросы Delphi 1 15.12.2007 22:27
загадочные clietnsocket и serversocket! steck Работа с сетью в Delphi 5 16.08.2007 14:48