Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Proble with latency of Socket 
:(
    Опции темы
Vitek1234
Дата 25.11.2010, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 11.2.2008

Репутация: нет
Всего: нет



У меня есть простенький сервер и клиент 

Сервер пишет

Код

  DataInputStream in = new DataInputStream(sin);
  DataOutputStream out = new DataOutputStream(sout);

 out.writeByte(line.length());
 out.flush();
 out.writeUTF(line); // отсылаем клиенту обратно ту самую строку текста.
 out.flush(); 


Клиент читает

Код

long time1 = System.currentTimeMillis();
 int value = in.read();
 byte[] bytes = new byte[100];
 in.read(bytes);
 long time2 = System.currentTimeMillis();


Я не понимаю почему клиент читает приблизительно за 203мс. Что за задержка и как исправить. 
Если только одна запись и чтение в сокет то задержка <1ms???

Ping 
Reply from 192.168.4.3: bytes=100 time<1ms TTL=128
Reply from 192.168.4.3: bytes=100 time<1ms TTL=128
Reply from 192.168.4.3: bytes=100 time<1ms TTL=128
Reply from 192.168.4.3: bytes=100 time<1ms TTL=128

Буду благодарен за любую помощь и литературу.

Это сообщение отредактировал(а) Vitek1234 - 25.11.2010, 22:08
PM MAIL   Вверх
Skipy
Дата 26.11.2010, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 4
Всего: 16



Не сравнивайте ping с чтением.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
Vitek1234
Дата 26.11.2010, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 11.2.2008

Репутация: нет
Всего: нет



Да может и не стоит. А всё таки...Почему так...Сначала <1mc, а потом такой резкий скачок. 

Существует некоторое решение хранения данных. Доступ реализован через сокеты. Но если мы делаем соединение с удалённого компьютера, 
время чтения очень медленное.  Подозреваю что здесь замешан буфер smile

Это сообщение отредактировал(а) Vitek1234 - 26.11.2010, 12:52
PM MAIL   Вверх
COVD
Дата 26.11.2010, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 11
Всего: 43



Зачем делать flush() после записи в сокет длины данных? Это выглядит как желание, чтобы этот один байт был немедленно отправлен. Данные отправляются пакетами, у каждого пакета есть хедер. Посылка данных мелкими порциями неэффективна. 
Это врядли причина, но лучше не мешать сокету делать свое дело.

PM MAIL   Вверх
Vitek1234
Дата 26.11.2010, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 11.2.2008

Репутация: нет
Всего: нет



Принимается. Но на самом деле я написал некий Мок этого сервера. Так вот и сам сервер даёт эту задержку. Причём тогда, когда размер передаваемых данных больше 256 байт. Чудеса...Но 256 байт - это не магическое число. 256 байт - это размер пакета? И перед отправкой следующего пакета он делает задержку 200 мс. Но зачем? 
PM MAIL   Вверх
COVD
Дата 26.11.2010, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 11
Всего: 43



Можете поэксперементировать с отключением в сокете Nagle algorithm - setTcpNoDelay, но это во многих случаях только во вред. По умолчанию он включен и это правильно. Размер TCP пакета примерно 1.5 кб.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0930 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.