Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6 7 8 9 10 11   вперед  Ctrl      все
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
ZeroMQ
Member

Откуда: Оттуда.
Сообщений: 10125
Как-то не очень внимательно рассмотрел схему "Запрос - Ответ" (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() с минимальным временем ожидания.
19 май 15, 12:16    [17660409]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
ZeroMQ
Member

Откуда: Оттуда.
Сообщений: 10125
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. Но - вполне возможно.
19 май 15, 13:30    [17660979]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
чччД
Guest
PPA
ZeroMQ
Краткий обзор 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).
8 дек 15, 01:15    [18527110]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
PPA
Member

Откуда: Караганда -> Липецк
Сообщений: 800
[quot чччД]
PPA
пропущено...
1. Один из пользователей форкнул код, реализовав замену CancelIoEx под WinXP. Пишет, что работает у него в продакшне.
.


адрес?
9 дек 15, 13:24    [18534931]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
чччД
Guest
PPA,

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

Вот отсюда можно за хвост потянуть: https://github.com/nanomsg/nanomsg/pull/349
9 дек 15, 15:38    [18536051]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
чччД
Guest
В ветку 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

И то хорошо.
19 мар 16, 05:22    [18952107]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
PPA
Member

Откуда: Караганда -> Липецк
Сообщений: 800
чччД,

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

WindowsXP + IP6 Teredo

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

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)

может сталкивался?
24 мар 16, 14:25    [18973338]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
defecator
Member

Откуда:
Сообщений: 39122
А разве в Windows XP было IP v6 ?
24 мар 16, 14:31    [18973380]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3295
defecator

К сообщению приложен файл. Размер - 82Kb
24 мар 16, 15:24    [18973759]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
чччД
Guest
defecator,

+1.

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

netsh int ipv6 install




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

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



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

И в 4.2.0 - тоже, за исключением блока, обеспечивающего новые сокеты ZMQ_CLIENT/ZMQ_SERVER.
24 мар 16, 15:31    [18973822]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
Feg16
Member [заблокирован]

Откуда: دولة اسرا
Сообщений: 5414
Блог
А движка для мультиплеера на них нету?
24 мар 16, 16:58    [18974401]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
чччД
Guest
Feg16
А движка для мультиплеера на них нету?


Что за "движок мультиплеера"?
24 мар 16, 20:57    [18975249]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
Feg16
Member [заблокирован]

Откуда: دولة اسرا
Сообщений: 5414
Блог
чччД
Что за "движок мультиплеера"?
Логика над сокетами - коннект, дисконнект, отправка подписанного пакета и т.п. Т.е. вся та обвязка которая необходима для подключения нескольких клиентов к серверу, и сервер который может обрабатывать данные от нескольких клиентов
24 мар 16, 21:04    [18975268]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
чччД
Guest
Feg16
чччД
Что за "движок мультиплеера"?
Логика над сокетами - коннект, дисконнект, отправка подписанного пакета и т.п. Т.е. вся та обвязка которая необходима для подключения нескольких клиентов к серверу, и сервер который может обрабатывать данные от нескольких клиентов

Ну так да. Выбираешь нужный тип сокета, и вперед.

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

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

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

Недостаток: основное назначение - для работы в локальных сетях по причинам архитектуры (можно заDDOSить, например). Ну и еще, до недавнего времени нельзя было сокеты передавать между вычислительными нитями. Особые правила работы для построения мультинитевых приложений.
24 мар 16, 21:30    [18975346]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
defecator
Member

Откуда:
Сообщений: 39122
так он хочет без низкоуровневых обёрток.
Нужно что-то типа DirectPlay
24 мар 16, 21:32    [18975349]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
чччД
Guest
defecator
...типа DirectPlay

Ну, тут кодировать - всего ничего (главное - придумать). Например, один из компов назначается "сервером", где клиенты регистрируются и где хранится состояние клиентов. А потом ты, запросив у сервера данные, сможешь напрямую общаться с другим, нужным тебе логическим клиентом.

Тут ты сам выстраиваешь нужную архитектуру, какая твоей левой пятке приглянется, а не пытаешься натянуть существующую на собственное понимание прекрасного.
24 мар 16, 21:48    [18975394]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
Feg16
Member [заблокирован]

Откуда: دولة اسرا
Сообщений: 5414
Блог
defecator
так он хочет без низкоуровневых обёрток.
Нужно что-то типа DirectPlay
Да :)
чччД
Тут ты сам выстраиваешь нужную архитектуру
Увы рук всего две, и они уже заняты остальным, поэтому приходится для тех или иных моментов натягивать уже готовое решение.
25 мар 16, 08:36    [18976067]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
defecator
Member

Откуда:
Сообщений: 39122
Feg16
defecator
так он хочет без низкоуровневых обёрток.
Нужно что-то типа DirectPlay
Да :)
чччД
Тут ты сам выстраиваешь нужную архитектуру
Увы рук всего две, и они уже заняты остальным, поэтому приходится для тех или иных моментов натягивать уже готовое решение.

Так натяни готовое решение - тот же DirectPlay, тем более в винду он встроен
25 мар 16, 08:42    [18976084]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
GunSmoker
Member

Откуда:
Сообщений: 3094
defecator, DirectPlay начал устаревать ещё в Vista, и потихоньку из винды выпиливается. Что вместо него - я бы сам не прочь узнать.
25 мар 16, 11:50    [18977070]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
defecator
Member

Откуда:
Сообщений: 39122
GunSmoker
defecator, DirectPlay начал устаревать ещё в Vista, и потихоньку из винды выпиливается. Что вместо него - я бы сам не прочь узнать.

так это же составная часть DirectX, как его могут выпилить-то ?
25 мар 16, 12:28    [18977303]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
PPA
Member

Откуда: Караганда -> Липецк
Сообщений: 800
чччД
defecator,

+1.

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

netsh int ipv6 install




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

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
25 мар 16, 12:33    [18977354]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
GunSmoker
Member

Откуда:
Сообщений: 3094
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.
25 мар 16, 12:54    [18977478]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
defecator
Member

Откуда:
Сообщений: 39122
GunSmoker, сурово попилили движок, не знал
25 мар 16, 13:05    [18977532]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
defecator
Member

Откуда:
Сообщений: 39122
Между тем, только что проверил - в Windows 1 (DirectX 11) есть интерфейсы DirectPlay.
Запустил приложение, собранное аж 18.12.1999, и спокойно подключился

Вроде ничего не ставил дополнительного
25 мар 16, 13:13    [18977564]     Ответить | Цитировать Сообщить модератору
 Re: ZeroMQ - сокеты на стероидах, часть 3 (а для чего?).  [new]
defecator
Member

Откуда:
Сообщений: 39122
Вот исходники примитивного чата через DirectPlay, внутри есть EXE, откомпилёный ещё на Delphi 2 в 1999 году:
http://rghost.ru/7q4zrQSGv

Всё работает в Window 7....
25 мар 16, 13:21    [18977613]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6 7 8 9 10 11   вперед  Ctrl      все
Все форумы / Delphi Ответить