Здравствуйте, Аноним, Вы писали:
А>Я как-то видел две тоненькие книженции 1 и 2-ю части про какую-то библиотеку для разработки клиент-серверных приложений, основанную на сокетах.
Здравствуйте, Аноним, Вы писали:
А>>В чем проблема? А>Я по неопытности думал что сокеты это достаточно просто... оказалось все совсем наоборот... Тогда подскажите, раз такие грабли с сокетами, и они появились не сегодня ( и грабли и сокеты , может быть есть относительно доступные библиотеки в которых учтены все эти тонкости и на которых можно организовать наиболее эффективную работу сервера и клиента? Первоначально предпологалось выявить наиболее производительный способ связи между сервером и клиентом в локальной сети. Пайпы взяли чисто для сравнения, думая что сокеты это есть круто, но есть ощущение что это не совсем так..
Если необходимо передавать маленькими порциями в режиме вопрос-ответ в пределах локальной сети, то лучше использовать UDP.
Если не секрет что должны клиент и сервер передавать друг другу?
Здравствуйте, Gomes, Вы писали:
G>Здравствуйте, Аноним, Вы писали:
А>>Я как-то видел две тоненькие книженции 1 и 2-ю части про какую-то библиотеку для разработки клиент-серверных приложений, основанную на сокетах.
G>ACE?
Она самая. Спасибо.
Здравствуйте, Gomes, Вы писали:
G>Здравствуйте, freelancer.malma, Вы писали:
FM>>Она самая. Спасибо.
G>Но использовать какие-либо библиотеки только для связи _двух_ машин в локалке как-то не разумно. Тут элементарная задача на голых сокетах решаемая.
Вот и я так же поначалу думал...и столкнулся с вышеуказанными проблемами. Исходники есть, можете посмотреть..
Я так пока думаю в следующих направлениях попробовать действовать:
1. использовать UDP протокол.
2. Использовать более сложную асинхронную обвязку.
3. Использовать 2 соединения: 1 на прием , 1 на отправку.
Здравствуйте, freelancer.malma, Вы писали:
FM>Вот и я так же поначалу думал...и столкнулся с вышеуказанными проблемами. Исходники есть, можете посмотреть..
Да нет никаких проблем. В зависимости от потребностей надо поиграться с размером буферов и форматом протокола. Мельком глянув код я заметил что сначала передается размер, а потом сами данные. Попробуй слать их вместе. Быстрее ТСР на голых сокетах (даже синхронных) для этой задачи ничего не придумаешь.
Здравствуйте, Gomes, Вы писали:
G>Здравствуйте, freelancer.malma, Вы писали:
FM>>Вот и я так же поначалу думал...и столкнулся с вышеуказанными проблемами. Исходники есть, можете посмотреть.. G>Да нет никаких проблем. В зависимости от потребностей надо поиграться с размером буферов и форматом протокола. Мельком глянув код я заметил что сначала передается размер, а потом сами данные. Попробуй слать их вместе. Быстрее ТСР на голых сокетах (даже синхронных) для этой задачи ничего не придумаешь.
Да, действительно немного помогло:
-------------- Режим клиента ---------------
Режим сокетов:
Передано 1000 блоков данных по 100 байт за 343 мс
Передано 1000 блоков данных по 1000 байт за 344 мс
Режим pipes:
Передано 1000 блоков данных по 100 байт за 15 мс
Передано 1000 блоков данных по 1000 байт за 31 мс
------------Client shutdown------------
Это после того как убрал один send\recv
-------------- Режим клиента ---------------
Режим сокетов:
Передано 1000 блоков данных по 100 байт за 188 мс
Передано 1000 блоков данных по 1000 байт за 187 мс
Режим pipes:
Передано 1000 блоков данных по 100 байт за 15 мс
Передано 1000 блоков данных по 1000 байт за 31 мс
------------Client shutdown------------
Здравствуйте, freelancer.malma, Вы писали:
FM>Здравствуйте, Gomes, Вы писали:
G>>Здравствуйте, freelancer.malma, Вы писали:
FM>>>Вот и я так же поначалу думал...и столкнулся с вышеуказанными проблемами. Исходники есть, можете посмотреть.. G>>Да нет никаких проблем. В зависимости от потребностей надо поиграться с размером буферов и форматом протокола. Мельком глянув код я заметил что сначала передается размер, а потом сами данные. Попробуй слать их вместе. Быстрее ТСР на голых сокетах (даже синхронных) для этой задачи ничего не придумаешь. FM>Да, действительно немного помогло:
FM>-------------- Режим клиента --------------- FM>Режим сокетов: FM>Передано 1000 блоков данных по 100 байт за 343 мс FM>Передано 1000 блоков данных по 1000 байт за 344 мс FM>Режим pipes: FM>Передано 1000 блоков данных по 100 байт за 15 мс FM>Передано 1000 блоков данных по 1000 байт за 31 мс FM>------------Client shutdown------------
FM>Это после того как убрал один send\recv FM>-------------- Режим клиента --------------- FM>Режим сокетов: FM>Передано 1000 блоков данных по 100 байт за 188 мс FM>Передано 1000 блоков данных по 1000 байт за 187 мс FM>Режим pipes: FM>Передано 1000 блоков данных по 100 байт за 15 мс FM>Передано 1000 блоков данных по 1000 байт за 31 мс FM>------------Client shutdown------------
FM>Но разница с пайпами все равно значительная..