powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
25 сообщений из 260, страница 5 из 11
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #38962519
ZeroMQ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то не очень внимательно рассмотрел схему "Запрос - Ответ" (REQ - REP).

А тут отладке приложения обнаружил, что "сервер" (там, где сокет REP) получает сообщение от клиента (там, где сокет REQ) не после отправки клиентом сообщения, а только после того, как клиент обратится к процедуре считывания ответа: receive или polling (zmq_msg_recv/zmq_poll).

То есть, клиент отправляет сообщение (zmq_msg_send), что-то делает дальше, но сервер ничего не видит. Пока клиент не захочет считать ответ от сервера (zmq_msg_recv или zmq_poll). В момент обращения клиента к zmq_msg_recv() или к zmq_poll() сервер фиксирует входное сообщение (zmq_msg_recv() или zmq_poll()) и может начать формировать ответ (zmq_msg_send).
Обращение же сервера к zmq_msg_send отправляет сообщение клиенту сразу.

Что, в общем, логично, если вспомнить работу по схеме "Запрос - Ответ" (REQ - REP). Но почему-то сие ускользнуло от моего понимания.
...
...полезно, например, если в режиме REQ-REP нужно серверу отправить служебный сигнал, не требующий подтверждения.
Для этого нужно не просто отправить сообщение, а еще и обратиться к zmq_msg_recv() с минимальным временем ожидания.
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #38962640
ZeroMQ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZeroMQКак-то не очень внимательно рассмотрел схему "Запрос - Ответ" (REQ - REP).

А тут отладке приложения обнаружил, что "сервер" (там, где сокет REP) получает сообщение от клиента (там, где сокет REQ) не после отправки клиентом сообщения, а только после того, как клиент обратится к процедуре считывания ответа: receive или polling (zmq_msg_recv/zmq_poll).

То есть, клиент отправляет сообщение (zmq_msg_send), что-то делает дальше, но сервер ничего не видит. Пока клиент не захочет считать ответ от сервера (zmq_msg_recv или zmq_poll). В момент обращения клиента к zmq_msg_recv() или к zmq_poll() сервер фиксирует входное сообщение (zmq_msg_recv() или zmq_poll()) и может начать формировать ответ (zmq_msg_send).
Обращение же сервера к zmq_msg_send отправляет сообщение клиенту сразу.

Что, в общем, логично, если вспомнить работу по схеме "Запрос - Ответ" (REQ - REP). Но почему-то сие ускользнуло от моего понимания.
...
...полезно, например, если в режиме REQ-REP нужно серверу отправить служебный сигнал, не требующий подтверждения.
Для этого нужно не просто отправить сообщение, а еще и обратиться к zmq_msg_recv() с минимальным временем ожидания.

А, не. Вовсе необязательно, что отправка сообщения будет отложена до receive или polling. Но - вполне возможно.
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39122783
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPAZeroMQКраткий обзор NanoMSG: https://hguemar.fedorapeople.org/slides/nanomsg/presentation.html

NanoMSG под XP не пашет.
CancelIoEx используется
https://github.com/nanomsg/nanomsg/issues/102
Есть две хорошие новости по поводу nanomsg:

1. Один из пользователей форкнул код, реализовав замену CancelIoEx под WinXP. Пишет, что работает у него в продакшне.

2. Для nanomsg будет реализован IPC протокол под Windows, на основе Named Pipes. Что радует: так как как минимум один из компонентов ZMQ обычно "слушает" tcp порт. Это вызывает вопросы при инсталляция приложений, основанных на ZeroMQ со стороны антивирусов и фаерволов.

... а может, и в ZeroMQ реализуют IPC под Windows, так как ZMQ теперь успешно развивается без главного идеолога (который "все бросил" и стал делать nanomsg).
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39124074
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot чччД]PPAпропущено...
1. Один из пользователей форкнул код, реализовав замену CancelIoEx под WinXP. Пишет, что работает у него в продакшне.
.

адрес?
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39124238
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPA,

что-то результат потерял... :(

Вот отсюда можно за хвост потянуть: https://github.com/nanomsg/nanomsg/pull/349
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39195896
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ветку ZMQ 4.1 вернули поддержку WindowsXP (которую в декабре 2015го лихо убрали из 4.1.4). Брать здесь: https://github.com/zeromq/zeromq4-1

В ветку ZMQ 4.2 тоже вернули поддержку WindowsXP, но не полностью: новые сокеты (ZMQ_SERVER/ZMQ_CLIENT) будут доступны в Windows Vista и новее. Брать здесь: https://github.com/zeromq/libzmq

И то хорошо.
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39199757
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,

А ipv6 пробовал под виндой?
у меня простой клиент не пашет.

WindowsXP + IP6 Teredo

под linux все хорошо.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
int zmq_test_client()
{
	void* context = zmq_ctx_new();
	printf("Client Starting!\n");
	int major = 0, minor = 0, patch = 0;
	zmq_version(&major, &minor, &patch);
	printf("ZeroMQ version: %d.%d.%d\n", major, minor, patch);
	
	void* request = zmq_socket(context, ZMQ_REQ);
	int ipv6 = 1;
	const auto l_result_opt = zmq_setsockopt(request, ZMQ_IPV6, &ipv6, 4);
	if (l_result_opt != 0)
		printf("zmq_setsockopt = %d\n", errno);
	auto l_result_connect = zmq_connect(request, "tcp://[2001:41D0:000A:1A3B:0000:0000:0000:0012]:4040");
	if (l_result_connect != 0)
		printf("zmq_connect = %d\n", errno);



E:\>test-console.exe
Client Starting!
ZeroMQ version: 4.2.0
Sending: hello - 0
Assertion failed: Bad protocol option (q:\vc15\r5xx\zmq\src\ip.cpp:116)

может сталкивался?
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39199765
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А разве в Windows XP было IP v6 ?
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39199838
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39199857
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,

+1.

ipv6 в Win XP требуется включать. PPA, попробуй, набери в командной строке:

Код: c#
1.
netsh int ipv6 install





PPA,
"Просто так" ipv6 - в Vista и новее.

Там даже при выходе релиза 4.1.4 лихо отменили поддержку WinXP из-за этого: заюзали функцию if_nametoindex()
...
Ну и просто
Код: pascal
1.
// Set target version to Windows Server 2008, Windows Vista or higher.




Потом, в 4.1.5 вернули ( https://github.com/zeromq/zeromq4-1 ).
Код: pascal
1.
//  Set target version to Windows Server 2003, Windows XP/SP1 or higher.


И в 4.2.0 - тоже, за исключением блока, обеспечивающего новые сокеты ZMQ_CLIENT/ZMQ_SERVER.
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39199953
Фотография Feg16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А движка для мультиплеера на них нету?
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39200113
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Feg16А движка для мультиплеера на них нету?

Что за "движок мультиплеера"?
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39200115
Фотография Feg16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДЧто за "движок мультиплеера"?Логика над сокетами - коннект, дисконнект, отправка подписанного пакета и т.п. Т.е. вся та обвязка которая необходима для подключения нескольких клиентов к серверу, и сервер который может обрабатывать данные от нескольких клиентов
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39200131
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Feg16чччДЧто за "движок мультиплеера"?Логика над сокетами - коннект, дисконнект, отправка подписанного пакета и т.п. Т.е. вся та обвязка которая необходима для подключения нескольких клиентов к серверу, и сервер который может обрабатывать данные от нескольких клиентов
Ну так да. Выбираешь нужный тип сокета, и вперед.

К примеру, режим "запрос-ответ": клиент отправляет запрос и ждет ответ. Сервер, получи запрос, отвечает только на него и только этому клиенту.
Реализация.
Используются сокет типа REQ и сокет типа REP.
К серверу (там сокет REP) коннектится куча клиентов (используя сокет REQ). Все запроси к серверу выстраиваются в очередь, сервер их по очереди разгребает и возвращает ответ именно тому клиенту, от которого получил запрос.
...
Если нужно общаться одновременно несколькими клиентами не по очереди, а одновременно (например, получить запрос от одного, обработать его и отправить результат другому) - используется пара сокетов Dialer - Router. При этом состав клиентского сообщения автоматически добавляется идентификатор клиента (назначается автоматически или ручками на клиенте). То есть, к примеру, получаешь сообщение, меняешь в нем адрес и отправляешь обратно. А оно приходит не к отправителю, а к тому, чей адрес ты подставил. Вот тебе и прокси в три строки кода.

Вопросы реконнекта при нестабильной связи встроены в движок, при падении сервера и его перезапуске восстановление связи происходит автоматом.

Есть всякие там шифрации и подписи.
Даже есть средства наблюдения за каталогами файловой системы в онлайне.

Недостаток: основное назначение - для работы в локальных сетях по причинам архитектуры (можно заDDOSить, например). Ну и еще, до недавнего времени нельзя было сокеты передавать между вычислительными нитями. Особые правила работы для построения мультинитевых приложений.
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39200132
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
так он хочет без низкоуровневых обёрток.
Нужно что-то типа DirectPlay
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39200138
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator...типа DirectPlay
Ну, тут кодировать - всего ничего (главное - придумать). Например, один из компов назначается "сервером", где клиенты регистрируются и где хранится состояние клиентов. А потом ты, запросив у сервера данные, сможешь напрямую общаться с другим, нужным тебе логическим клиентом.

Тут ты сам выстраиваешь нужную архитектуру, какая твоей левой пятке приглянется, а не пытаешься натянуть существующую на собственное понимание прекрасного.
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39200265
Фотография Feg16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorтак он хочет без низкоуровневых обёрток.
Нужно что-то типа DirectPlayДа :)
чччДТут ты сам выстраиваешь нужную архитектуруУвы рук всего две, и они уже заняты остальным, поэтому приходится для тех или иных моментов натягивать уже готовое решение.
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39200271
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Feg16defecatorтак он хочет без низкоуровневых обёрток.
Нужно что-то типа DirectPlayДа :)
чччДТут ты сам выстраиваешь нужную архитектуруУвы рук всего две, и они уже заняты остальным, поэтому приходится для тех или иных моментов натягивать уже готовое решение.
Так натяни готовое решение - тот же DirectPlay, тем более в винду он встроен
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39200447
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, DirectPlay начал устаревать ещё в Vista, и потихоньку из винды выпиливается. Что вместо него - я бы сам не прочь узнать.
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39200482
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
GunSmokerdefecator, DirectPlay начал устаревать ещё в Vista, и потихоньку из винды выпиливается. Что вместо него - я бы сам не прочь узнать.
так это же составная часть DirectX, как его могут выпилить-то ?
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39200491
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДdefecator,

+1.

ipv6 в Win XP требуется включать. PPA, попробуй, набери в командной строке:

Код: c#
1.
netsh int ipv6 install





Я естественно включил ip6 в XP руками
но проблема в самой либе оказалась в методе

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
void zmq::enable_ipv4_mapping (fd_t s_)
{
  (void) s_;

#ifdef IPV6_V6ONLY
#ifdef ZMQ_HAVE_WINDOWS
    DWORD flag = 0;
#else
    int flag = 0;
#endif
    int rc = setsockopt (s_, IPPROTO_IPV6, IPV6_V6ONLY, (const char*) &flag,
        sizeof (flag));
#ifdef ZMQ_HAVE_WINDOWS
    wsa_assert (rc != SOCKET_ERROR);
#else
    errno_assert (rc == 0);
#endif
#endif
}



IPV6_V6ONLY - This socket option is supported on Windows Vista or later.
https://msdn.microsoft.com/en-us/library/windows/desktop/ms738574(v=vs.85).aspx

Странно что в самой zmq не детектят версию винды и зовут этот метод
как починить правльнее пока не знаю - убрал экраном IPV6_V6ONLY
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39200508
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,
авторWarning: Microsoft DirectPlay has been deprecated. Deprecated components of Microsoft DirectX 9.0 for Managed Code are considered obsolete. While these components are still supported in this release of DirectX 9.0 for Managed Code, they may be removed in the future. When writing new applications, you should avoid using these deprecated components. When modifying existing applications, you are strongly encouraged to remove any dependency on these components.
авторDirectPlay will be supported in DirectX DLLs for the lifetime of Microsoft Windows XP, but from the autumn of 2007 the headers and libraries — vital components if developers wanted to develop new programs that utilize the technology — were absent from the DirectX SDK.

In Windows Vista, DirectPlay has been deprecated and DirectPlay Voice and DirectPlay's NAT Helper have been removed.

В DirectX 10 и выше DirectPlay нет. В Vista и выше нет необходимых сетевых компонентов. Выпилили по аналогии с .hlp - при запуске программы в первый раз выводится запрос на скачку/установку пакета поддержки старья.

Также выпилили DirectSound и DirectMusic.
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39200516
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
GunSmoker, сурово попилили движок, не знал
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39200526
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Между тем, только что проверил - в Windows 1 (DirectX 11) есть интерфейсы DirectPlay.
Запустил приложение, собранное аж 18.12.1999, и спокойно подключился

Вроде ничего не ставил дополнительного
...
Рейтинг: 0 / 0
ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
    #39200544
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Вот исходники примитивного чата через DirectPlay, внутри есть EXE, откомпилёный ещё на Delphi 2 в 1999 году:
http://rghost.ru/7q4zrQSGv

Всё работает в Window 7....
...
Рейтинг: 0 / 0
25 сообщений из 260, страница 5 из 11
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]