Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: BSD sockets & nonblocked send()  (Прочитано 5032 раз)
0 Пользователей и 1 Гость смотрят эту тему.
comm
Гость
« : 27-10-2004 19:22 » 

Народ! не подскажет кто?

Проблема есть по сокетам, уже забодался с ними.. (

дано
серверный сокет находится в неблокирующем режиме
клиентский - в блокирующем
режим - STREAM
размер сообщений  ~20 байт
обмен производится через localhost
платформа FreeBSD 4.9


проблема
при протоколе обмена  SRR (send-receive-reply)
скорость обмена получается весьма низкой около 4-5 транзакций/сек

в тоже время при однонаправленной передаче (типа спама канала) скорость 800 транзакций/сек в любую сторону

сервер накручивает около 7000 циклов/сек  (цикл послать если есть что, принять если есть что)

симтомы похожи на буферизацию выходного потока
в манах начитал про SO_SNDTIMEO/SO_SNDLOWAT , крутил оба параметра никакого эффекта

вопрос
   как это вылечить ? (чтобы нормальная скорость была по SRR)
  куда читать лучше?
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 28-10-2004 08:41 » 

comm, в клиенте и сервере поставь опцию TCP_NODELAY

По-умолчанию, TCP накапливает данные перед отправкой, чтобы выдать сегмент большого размера. Опция TCP_NODELAY указывает реализации, что данные надо отправлять немедленно.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
comm
Гость
« Ответ #2 : 28-10-2004 13:43 » 

спасибо! именно это мне и нужно было! скорость обмена возросла на порядок
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 28-10-2004 14:15 » 

comm, если протокол заключается только в трёх сообщениях, размер сообщений небольшой, сетка надёжная, то можно воспользоваться UDP.  Минимум накладных расходов.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
comm
Гость
« Ответ #4 : 29-10-2004 07:29 » 

Цитата: npak
comm, если протокол заключается только в трёх сообщениях, размер сообщений небольшой, сетка надёжная, то можно воспользоваться UDP.  Минимум накладных расходов.


UDP я рассматривал как вариант, но мне нужен синхронный протокол, а UDP по природе асинхронный
к тому же у меня библиотека есть, реализующая весь клиентский протокол сообщений на потоках
(в ней и был баг)

а сетка надежней некуда, localhost %)
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines