Commit 564b179b authored by Pavel Vainerman's avatar Pavel Vainerman Committed by Pavel Vainerman

[unet-multicast]: some docs

parent a8e58a09
...@@ -312,6 +312,7 @@ bool MulticastSendTransport::isConnected() const ...@@ -312,6 +312,7 @@ bool MulticastSendTransport::isConnected() const
void MulticastSendTransport::setTimeToLive( int _ttl ) void MulticastSendTransport::setTimeToLive( int _ttl )
{ {
ttl = ttl; ttl = ttl;
if( udp ) if( udp )
udp->setTimeToLive(_ttl); udp->setTimeToLive(_ttl);
} }
......
...@@ -47,6 +47,7 @@ namespace uniset ...@@ -47,6 +47,7 @@ namespace uniset
- \ref pgUNetUDP_Common - \ref pgUNetUDP_Common
- \ref pgUNetUDP_Conf - \ref pgUNetUDP_Conf
- \ref pgUNetUDP_ConfMulticast
- \ref pgUNetUDP_Reserv - \ref pgUNetUDP_Reserv
- \ref pgUNetUDP_SendFactor - \ref pgUNetUDP_SendFactor
- \ref pgUNetUDP_Stat - \ref pgUNetUDP_Stat
...@@ -60,13 +61,21 @@ namespace uniset ...@@ -60,13 +61,21 @@ namespace uniset
При этом "получатели" работают на одном(!) потоке с использованием событий libev (см. UNetReceiver). При этом "получатели" работают на одном(!) потоке с использованием событий libev (см. UNetReceiver).
или каждый на своём потоке. Это определяется параметром \b unet_update_strategy. или каждый на своём потоке. Это определяется параметром \b unet_update_strategy.
В текущей версии поддерживается два протокола для обмена udp и multicast. Какой использовать протокол
определяется в настроечной секции параметром \b unet_transport="udp" или \b unet_transport="multicast".
По умолчанию "udp".
\code
<UNetExchange name=".." unet_transport="udp" />
\endcode
В зависимости от заданного протокола, будут использованы те или иные настройки.
\par \par
При своём старте процесс считывает из секции \<nodes> список узлов которые необходимо "слушать", При своём старте процесс считывает из секции \<nodes> список узлов которые необходимо "слушать",
а также параметры своего узла. Открывает по потоку приёма на каждый узел и поток а также параметры своего узла. Открывает по потоку приёма на каждый узел и поток
передачи для своих данных. Помимо этого такие же потоки для резервных каналов, если они включены передачи для своих данных. Помимо этого такие же потоки для резервных каналов, если они включены
(см. \ref pgUNetUDP_Reserv ). (см. \ref pgUNetUDP_Reserv ).
\section pgUNetUDP_Conf Пример конфигурирования \section pgUNetUDP_Conf Пример конфигурирования (UDP)
По умолчанию при считывании используется \b unet_broadcast_ip (указанный в секции \<nodes>) По умолчанию при считывании используется \b unet_broadcast_ip (указанный в секции \<nodes>)
и \b id узла - в качестве порта. и \b id узла - в качестве порта.
Но можно переопределять эти параметры, при помощи указания \b unet_port и/или \b unet_broadcast_ip, Но можно переопределять эти параметры, при помощи указания \b unet_port и/или \b unet_broadcast_ip,
...@@ -91,6 +100,43 @@ namespace uniset ...@@ -91,6 +100,43 @@ namespace uniset
\note Имеется возможность задавать отдельную настроечную секцию для "списка узлов" при помощи параметра \note Имеется возможность задавать отдельную настроечную секцию для "списка узлов" при помощи параметра
--prefix-nodes-confnode name. По умолчанию настройка ведётся по секции <nodes> --prefix-nodes-confnode name. По умолчанию настройка ведётся по секции <nodes>
\section pgUNetUDP_ConfMulticast Пример конфигурирования (Multicast)
По умолчанию при считывании используется \b unet_multicast_ip (указанный в секции \<nodes>)
и \b id узла - в качестве порта.
Но можно переопределять эти параметры, при помощи указания \b unet_mulsicast_port и/или \b unet_multicast_ip,
для конкретного узла (\<item>).
Группы для подписки описываются в специальной секции \b <mulitcast>. Секция <recevive> описывает группы на которые
подписывается данные узел. Секция <send> описывает в какие группы данный узел будет посылать сообщения.
\code
<nodes port="2809" unet_broadcast_ip="192.168.56.255">
<item ip="127.0.0.1" name="LocalhostNode" textname="Локальный узел" unet_ignore="1" unet_multicast_port="3000" unet_multicast_ip="192.168.57.255">
<iocards>
...
</iocards>
</item>
<item ip="192.168.56.10" name="Node1" textname="Node1" unet_multicast_port="3001" unet_update_strategy="evloop">
<multicast>
<receive>
<group addr="239.255.1.1" addr2="239.255.2.1"/>
</receive>
<send>
<group addr="239.255.1.1" addr2="239.255.2.1"/>
</send>
</multicast>
</item>
<item ip="192.168.56.11" name="Node2" textname="Node2" unet_multicast_port="3002">
<multicast>
<receive>
<group addr="239.255.1.1" addr2="239.255.2.1"/>
</receive>
<send>
<group addr="239.255.1.1" addr2="239.255.2.1"/>
</send>
</multicast>
</item>
</nodes>
\endcode
\section pgUNetUDP_Reserv Настройка резервного канала связи \section pgUNetUDP_Reserv Настройка резервного канала связи
В текущей реализации поддерживается возможность обмена по двум подсетям (Ethernet-каналам). В текущей реализации поддерживается возможность обмена по двум подсетям (Ethernet-каналам).
Она основана на том, что, для каждого узла помимо основного "читателя", Она основана на том, что, для каждого узла помимо основного "читателя",
...@@ -100,6 +146,7 @@ namespace uniset ...@@ -100,6 +146,7 @@ namespace uniset
второй канал, достаточно объявить в настройках переменные второй канал, достаточно объявить в настройках переменные
\b unet_broadcast_ip2. А также в случае необходимости для конкретного узла \b unet_broadcast_ip2. А также в случае необходимости для конкретного узла
можно указать \b unet_broadcast_ip2 и \b unet_port2. можно указать \b unet_broadcast_ip2 и \b unet_port2.
Или в случае multicast \b unet_multicast_ip2 и \b unet_multicast_port2.
Переключение между "каналами" происходит по следующей логике: Переключение между "каналами" происходит по следующей логике:
......
...@@ -36,7 +36,7 @@ TEST_CASE("[UNetUDP]: multicast setup", "[unetudp][multicast][config]") ...@@ -36,7 +36,7 @@ TEST_CASE("[UNetUDP]: multicast setup", "[unetudp][multicast][config]")
REQUIRE( t2->toString() == "127.0.1.1:2999" ); REQUIRE( t2->toString() == "127.0.1.1:2999" );
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
TEST_CASE("[UNetUDP]: multicast receive", "[unetudp][multicast][exchange]") TEST_CASE("[UNetUDP]: multicast transport", "[unetudp][multicast][transport]")
{ {
UniXML xml("unetudp-test-configure.xml"); UniXML xml("unetudp-test-configure.xml");
UniXML::iterator it = xml.findNode(xml.getFirstNode(), "nodes"); UniXML::iterator it = xml.findNode(xml.getFirstNode(), "nodes");
...@@ -67,7 +67,7 @@ TEST_CASE("[UNetUDP]: multicast receive", "[unetudp][multicast][exchange]") ...@@ -67,7 +67,7 @@ TEST_CASE("[UNetUDP]: multicast receive", "[unetudp][multicast][exchange]")
msg = "hello world, again"; msg = "hello world, again";
REQUIRE( t2->send(msg.data(), msg.size()) == msg.size() ); REQUIRE( t2->send(msg.data(), msg.size()) == msg.size() );
memset(buf,0,sizeof(buf)); memset(buf, 0, sizeof(buf));
REQUIRE( t1->receive(&buf, sizeof(buf)) == msg.size() ); REQUIRE( t1->receive(&buf, sizeof(buf)) == msg.size() );
REQUIRE( string((const char*)buf) == msg ); REQUIRE( string((const char*)buf) == msg );
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment