Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

Большая задержка...   Найти похожие ветки 

 
able ©   (2004-11-01 19:16) [0]

Здравствуйте, Мастера!
Делаю чат, использую компоненты TServerSocket & TClientSocket.
Когда приходит сообщение на сервер пересылаю его на всех
клиентов:

   for a:=0 to connum-1 do
     form1.ServerSocket1.Socket.Connections[a].SendText(msg);

"Connum" при подключении connum:=connum+1;
А когда ClientDisconnect connum:=connum-1;

Всё бы хорошо, но сообщения отсылаются с задержкой 5-6, а то
и все 10 секунд, а для чата это не приемлимо.
Скажите, из-за чего может это быть? Сетка 100мб, не загружена.
Может можно сделать как-нибудь подругому?


 
SkyNet   (2004-11-01 19:41) [1]

естественно по другому....
рекомендую протокол UDP
неплохие компоненты Indy idUDPServer
idUDPClient...
просто пойми то что чат должен постоянно принимать и посылать множество данных... TCP протокол для чата конечно хорош....но не для широковещательной разсылки... а для передачи данных точка-точка... хотя и UDP справляется с этим неплохо.... и намного быстрее!!!! без задержек на установку связи проверку каждого пакета на факт доставки дисконект и тд...


 
Piter ©   (2004-11-01 20:33) [2]

SkyNet   (01.11.04 19:41) [1]
естественно по другому....
рекомендую протокол UDP


ничего естественного. Хороший чат должен работать с выделенным сервером. По TCP/IP естественно. Как например, mIRC.

able ©   (01.11.04 19:16)

мне кажется странным то, что ты говоришь. Что-то ты утаиваешь, наверняка есть какой-то код, который тормозит.

Чтобы увериться, что это не глюк - напиши тестовое приложение. Сервер, который тупо принимает подключения и клиент, который тупо подключается.

Потом при нажатии на батон выполни приведенный тобой код - должен исполниться очень быстро.

Плюс хочу заметить, что зачем ты используешь глобальную переменную connum? Ведь число подключенных пользователей можно узнать и так, через свойство TServerSocket


 
Digitman ©   (2004-11-02 09:35) [3]


> able ©   (01.11.04 19:16)


возможно, причиной ситуации с задержкой является буферизация пересылаемых сообщений на передающей стороне .. алгоритм Нагля, реализующий буферизацию, по умолчанию задействован после создания гнезда, но его можно отключить при необходимости

включение/отключение алгоритма Нагля осуществляется вызовом WinsockAPI-функции SetSockOpt(), управляющей различными опциями гнезда, в т.ч. опцией TCP_NODELAY, имеющей непосред.отношение к использованию этого алгоритма

при вызове ф-ции SetSockOpt в ее параметрах необходимо указать
- хэндл гнезда, опция которого изменяется (см. TCustomWinSocket.SocketHandle)
- собственно константу, определяющую конкретную опцию (TCP_NODELAY)
- адрес dword-переменной, значение которой определяет вновь устанавливаемое значение опции (1/0 - отключить/включить алгоритм Нагля)


 
able ©   (2004-11-02 20:35) [4]

Запустил сервак на буке (Cel-1.7ghz) - всё нормально.
Значит, дело не в сети, хотя, может там и отключен алгоритм Нагля. У меня p-2 330 ghz...
Впрочем, я ещё забыл, что идёт "шифрование" всей переходящей инфы:

procedure Code(var text: string; password: string;
 decode: boolean);
var
 i, PasswordLength: integer;
 sign: shortint;
begin
 PasswordLength := length(password);
 if PasswordLength = 0 then Exit;
 if decode
   then sign := -1
   else sign := 1;
 for i := 1 to Length(text) do
   text[i] := chr(ord(text[i]) + sign *
     ord(password[i mod PasswordLength + 1]));
end;

По слову "simple"..


 
Verg ©   (2004-11-02 21:06) [5]

Все равно непонятно. Нет там никаких задержек. В таких условиях и быть не может. Тем более измеряемых в единицах секунд (бедный Нагл тут асолютно не при чем).
При чем тут задержки? Задержки между чем и чем? И почему поиск этой "задержки" акцентирован на передающей стороне?


 
able ©   (2004-11-03 07:26) [6]

Verg ©   (02.11.04 21:06) [5]
Вот и мне непонятно. То, что задержка идёт не из-за шифрования это точно, т.к. можно хоть 10 клиентов подключить с локального компа на локальный сервер... а вот когда подключается кто-то из сети. И если запустить сервер на другом компьютере всё нормально.. Хотя винду вчера только на своём поставил..



Страницы: 1 вся ветка

Текущий архив: 2005.01.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
1-1105367591
Guest_01
2005-01-10 17:33
2005.01.23
Подскажите, в чем ошибка?


14-1105092511
Empleado
2005-01-07 13:08
2005.01.23
Спасибо Королевству


1-1104995714
Stanislav
2005-01-06 10:15
2005.01.23
Форма из DLL


4-1101888255
arki
2004-12-01 11:04
2005.01.23
EnableWindow блокировка ввода для окна


14-1104215410
Rouse_
2004-12-28 09:30
2005.01.23
C Днем Рождения 28 Декабря