Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.04 c
3-1103347304
slart
2004-12-18 08:21
2005.01.23
SQL+delphi


3-1103550189
/glokk
2004-12-20 16:43
2005.01.23
FIBPlus (backup/restore)


1-1105216331
WhiteGuy
2005-01-08 23:32
2005.01.23
ExtToStr


14-1104869198
olookin
2005-01-04 23:06
2005.01.23
Chelsea-Middlsborough


9-1097483896
utyf
2004-10-11 12:38
2005.01.23
как исправить directdraw.pas для delphi7 или где взять работающи?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский