Проект "Свободные голосования"
http://gplvote.andyhost.ru/forum/

transport::modules::ITransportModule
http://gplvote.andyhost.ru/forum/viewtopic.php?f=21&t=193
Страница 1 из 2

Автор:  yurial [ 09 окт 2011, 13:47 ]
Заголовок сообщения:  transport::modules::ITransportModule

Обсуждаем интерфейс транспортного модуля.
Код:
class ITransportModule
{
public:
vector<pollfd> poll() const; //man poll, man WSAPoll, man select. (windows, без поддержки poll, придется эмулировать)
int process(pollfd& fd); //обработка соединения
int send(cosnt TPacket& packet, bitset<32> group); //отправка пакета, group введено для возможности отправки по разным группам.
int recv(TRecvCallback callback); //установки функции, вызываемой при получении пакета
};

Думаю этого достаточно.

Автор:  Андрей [ 09 окт 2011, 14:23 ]
Заголовок сообщения:  Re: transport::modules::ITransportModule

Я не могу понять какой язык вы используете C++ или C#?

C# хорош для программирования, но необходимость тащить за собой Mono или .Net сильно уменьшает его преимущества.

Автор:  Андрей [ 09 окт 2011, 14:59 ]
Заголовок сообщения:  Re: transport::modules::ITransportModule

По существу - не понял назначение методов process и poll.

По идее, максимум который там нужен - init и finalize методы, которые будет вызываться при загрузке модуля. Зачем в публичных мотодех что-то, кроме передачи и получения сообщений не понял.

Кстати, есть такая хорошая библиотечка libevent. Возможно, имеет смысл использовать, что-бы не заморачиваться с низким уровнем. Я ее пробовал использовать для своих проектов - очень понравилась.

Автор:  Dim [ 09 окт 2011, 20:49 ]
Заголовок сообщения:  Re: transport::modules::ITransportModule

Андрей писал(а):
По идее, максимум который там нужен - init и finalize методы, которые будет вызываться при загрузке модуля. Зачем в публичных методах что-то, кроме передачи и получения сообщений не понял.
У меня хуже понимание. Если как транспортный модуль понимать распределённую сеть, то зачем низкоуровневые методы. А если как транспортный модуль понимать способы соединения внутри распределённой сети (tcp, udp, sctp), то их маловато. Но во втором случае на любой системе мы дефакто имеем все протоколы и не вижу причины использовать их меньше чем все. Имеет смысл подождать продолжения. :?:

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

Андрей писал(а):
Кстати, есть такая хорошая библиотечка libevent. Возможно, имеет смысл использовать, что-бы не заморачиваться с низким уровнем. Я ее пробовал использовать для своих проектов - очень понравилась.
А ещё есть boost::asio c портабельной реализацией сетевой системы. При этом boost это то, что "завтра" будет в stl. ;)

Автор:  Андрей [ 09 окт 2011, 21:09 ]
Заголовок сообщения:  Re: transport::modules::ITransportModule

Dim писал(а):
Андрей писал(а):
По идее, максимум который там нужен - init и finalize методы, которые будет вызываться при загрузке модуля. Зачем в публичных методах что-то, кроме передачи и получения сообщений не понял.
У меня хуже понимание. Если как транспортный модуль понимать распределённую сеть, то зачем низкоуровневые методы. А если как транспортный модуль понимать способы соединения внутри распределённой сети (tcp, udp, sctp), то их маловато. Но во втором случае на любой системе мы дефакто имеем все протоколы и не вижу причины использовать их меньше чем все. Имеет смысл подождать продолжения. :?:

При всем желании никто не сможет реализовать все эти модули одновременно. Все-равно они будут реализовываться по порядку и tcp - логичное начало.

Dim писал(а):
Опять непонятно кто кому будет модулем. Транспорт представляющий из себя узел распределённой сети будет модулем для системы голосования или наоборот. Мне всю дорогу вдалбливали, что модулем должно быть то, что в рамках системы имеет меньшее время жизни.

Транспортный модуль будет модулем в служебном сервисе (демоне).

Dim писал(а):
Андрей писал(а):
Кстати, есть такая хорошая библиотечка libevent. Возможно, имеет смысл использовать, что-бы не заморачиваться с низким уровнем. Я ее пробовал использовать для своих проектов - очень понравилась.
А ещё есть boost::asio c портабельной реализацией сетевой системы. При этом boost это то, что "завтра" будет в stl. ;)

Многие-ли проекты уже используют boost::asio?

Автор:  Dim [ 09 окт 2011, 22:39 ]
Заголовок сообщения:  Re: transport::modules::ITransportModule

Андрей писал(а):
При всем желании никто не сможет реализовать все эти модули одновременно. Все-равно они будут реализовываться по порядку и tcp - логичное начало.
Да и не надо их все сразу реализовывать. Это не причина выноса в модули. Достаточно начинать использовать протоколы по необходимости. Практически все функции можно реализовать используя только tcp. Остальные нужны только для повышения эффективности, когда уткнёмся в физические ограничения tcp.
Андрей писал(а):
Транспортный модуль будет модулем в служебном сервисе (демоне).
Какие функции у демона?
Андрей писал(а):
Многие-ли проекты уже используют boost::asio?
Не задумывался даже. Просто boost используется для обкатки того, что впоследствии входит в стандартные библиотеки языка C++. Т.е. Ваш вопрос почти аналогичен "многие ли проекты используют std::string?"

Автор:  yurial [ 10 окт 2011, 00:51 ]
Заголовок сообщения:  Re: transport::modules::ITransportModule

Андрей писал(а):
Я не могу понять какой язык вы используете C++ или C#?

С++, к C# у меня крайне негативное отношение.
Андрей писал(а):
По существу - не понял назначение методов process и poll.

Для ожидания событий связанных с соединениями.
Андрей писал(а):
Кстати, есть такая хорошая библиотечка libevent.

Судя по описаниям - как раз то, что я хотел реализовать с помощью poll.
Изучу возможности библиотеки - выскажу мнение.
Dim писал(а):
А ещё есть boost::asio c портабельной реализацией сетевой системы. При этом boost это то, что "завтра" будет в stl. ;)

На данный момент boost меня немного пугает.
ps по поводу модулей - хуже ведь от них не станет? Каждый сможет особо не заморачиваясь написать свой собственный модуль.

Автор:  Dim [ 10 окт 2011, 01:21 ]
Заголовок сообщения:  Re: transport::modules::ITransportModule

Dim писал(а):
На данный момент boost меня немного пугает.
Если не касаться метапрограммирования, то в нём ничего страшного и нет.
Dim писал(а):
ps по поводу модулей - хуже ведь от них не станет? Каждый сможет особо не заморачиваясь написать свой собственный модуль.
C++ не Java. Несколько лет назад читал довольно объёмную статью о "прелестях и радостях" построения системы плагинов для C++ в условиях кроссплатформной и кросскомпиляторной разработки. Вводная часть изобиловала выражениями типа: не обязан, не гарантирует, неопределённый результат.
При этом в целом являясь сторонником плагинов считаю, что применять их следует с большой осторожностью и там где по другому никак не обойтись.

Автор:  yurial [ 10 окт 2011, 11:14 ]
Заголовок сообщения:  Re: transport::modules::ITransportModule

Dim писал(а):
Если не касаться метапрограммирования, то в нём ничего страшного и нет.

Мета-программирование меня не пугает, меня пугает размер библиотеки, и то что ее повсюду придется таскать. При веских аргументах я готов попробовать boost. Dim, а у вас собственно есть опыт работы с boost?
Dim писал(а):
C++ не Java. Несколько лет назад читал довольно объёмную статью о "прелестях и радостях" построения системы плагинов для C++ в условиях кроссплатформной и кросскомпиляторной разработки. Вводная часть изобиловала выражениями типа: не обязан, не гарантирует, неопределённый результат.
При этом в целом являясь сторонником плагинов считаю, что применять их следует с большой осторожностью и там где по другому никак не обойтись.

Могли бы вы найти подобную статью. Лично я проблем не вижу: существуют лишь некоторые ограничения.

Автор:  Андрей [ 10 окт 2011, 12:16 ]
Заголовок сообщения:  Re: transport::modules::ITransportModule

Dim писал(а):
Андрей писал(а):
При всем желании никто не сможет реализовать все эти модули одновременно. Все-равно они будут реализовываться по порядку и tcp - логичное начало.
Да и не надо их все сразу реализовывать. Это не причина выноса в модули. Достаточно начинать использовать протоколы по необходимости. Практически все функции можно реализовать используя только tcp. Остальные нужны только для повышения эффективности, когда уткнёмся в физические ограничения tcp.

Причина выноса в модули - потенциал для дальнейшего развития. Что-бы в будущем в систему можно было, например, быстро добавить поддержку FreeNet, I2P или других распределенных сетей.

Dim писал(а):
Андрей писал(а):
Транспортный модуль будет модулем в служебном сервисе (демоне).
Какие функции у демона?

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

Dim писал(а):
Андрей писал(а):
Многие-ли проекты уже используют boost::asio?
Не задумывался даже. Просто boost используется для обкатки того, что впоследствии входит в стандартные библиотеки языка C++. Т.е. Ваш вопрос почти аналогичен "многие ли проекты используют std::string?"

Я к тому, что нужно выбирать хотя-бы немного опробованные инструменты. Заниматься их тестированием в контексте нашего проекта - это конечно неплохо для этих инструментов, но плохо для нашего проекта. Насколько я знаю, предложенная мною библиотека libevent уже используется в очень многих проектах. Что позволяет надеяться на ее качество.

Страница 1 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/