Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² QNX/Neutrino 2. Руководство ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² QNX Realtime PlatformΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 33

Автор Π ΠΎΠ± ΠšΡ‘Ρ€Ρ‚Π΅Π½

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ сообщСния Π±Π΅Π· блокирования, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠΌΒ» (pulse). Π˜ΠΌΠΏΡƒΠ»ΡŒΡ β€” это ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€Π½ΠΎΠ΅ сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅:

β€’ ΠΌΠΎΠΆΠ΅Ρ‚ пСрСнСсти 40 Π±ΠΈΡ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (8-Π±ΠΈΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ 32 Π±ΠΈΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ…);

β€’ ΡΠ²Π»ΡΠ΅Ρ‚ся Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ для отправитСля;

β€’ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ сообщСниС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°;

β€’ ΡΡ‚авится Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Ссли ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ сообщСния.

ΠŸΡ€ΠΈΠ΅ΠΌ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ°

ΠŸΡ€ΠΈΠ΅ΠΌ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ° выполняСтся ΠΎΡ‡Π΅Π½ΡŒ просто: ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅, Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ сообщСниС пСрСдаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MsgReceive(), ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ стандартноС сообщСниС. ЕдинствСнноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ смоТСтС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ MsgReply() ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ, ΠΊΡ€ΠΎΠΌΠ΅ всСго ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, общая идСя ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это сообщСниС ΠΏΠΎ своСй сути являСтся асинхронным. Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, MsgReceivePulse(), ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ².

ЕдинствСнно Ρ‡Ρ‚ΠΎ забавляСт ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ°ΠΌΠΈ β€” это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ отправитСля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ возвращаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ MsgReceive() ΠΏΡ€ΠΈ ΠΈΡ… ΠΏΡ€ΠΈΠ΅ΠΌΠ΅, ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ Π²Π΅Ρ€Π½Ρ‹ΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ принятоС сообщСниС являСтся ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠΌ, Π° Π½Π΅ стандартным сообщСниСм ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’ ΠΊΠΎΠ΄Π΅ сСрвСров Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ часто Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ прСдставлСнному Π½ΠΈΠΆΠ΅:

#include <sys/neutrino.h>


rcvid = MsgReceive(chid, ...);

if (rcvid == 0) { // Π­Ρ‚ΠΎ ΠΈΠΌΠΏΡƒΠ»ΡŒΡ

 // ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ°


 // ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ

} else { // Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ сообщСниС

 // ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ сообщСния


 // ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ

}

Π§Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ°?

Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ сообщСниС с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ отправитСля. Π§Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ? Π’ΠΎΡ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° <sys/neutrino.h>:

struct _pulse {

 _uint16      type;

 _uint16      subtype;

 _int8        code;

 _uint8       zero[3];

 union sigval value;

 _int32       scoid;

};

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ type ΠΈ subtype Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ (это Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ ΠΈΠΌΠΏΡƒΠ»ΡŒΡ); содСрТимоС элСмСнтов code ΠΈ value опрСдСляСтся ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»Π΅ΠΌ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС элСмСнт code Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π» ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ ΠΈΠΌΠΏΡƒΠ»ΡŒΡ, Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ value Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ 32 Π±ΠΈΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ…, ассоциируСмых с Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠΌ. Π­Ρ‚ΠΈ Π΄Π²Π° поля ΠΈ Π΅ΡΡ‚ΡŒ Ρ‚Π΅ самыС 40 Π±ΠΈΡ‚ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°; Π΄Ρ€ΡƒΠ³ΠΈΠ΅ поля ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π΅ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ.

Π―Π΄Ρ€ΠΎ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° code, оставляя 127 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для программистов β€” для использования ΠΏΠΎ своСму ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ value Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ являСтся элСмСнтом Ρ‚ΠΈΠΏΠ° union:

union sigval {

 int sival_int;

 void *sival_ptr;

};

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ (Π² Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° с сСрвСром, прСдставлСнного Π²Ρ‹ΡˆΠ΅) Π²Ρ‹ часто Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ этой:

#include <sys/neutrino.h>


rcvid = MsgReceive(chid, ...

if (rcvid == 0) { // Π˜ΠΌΠΏΡƒΠ»ΡŒΡ

 // ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ°

 switch (msg.pulse.code) {

 case MY_PULSE_TIMER:

  // Π‘Ρ€Π°Π±ΠΎΡ‚Π°Π» ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΡˆΠΈΡ… Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ²,

  // Π½Π°Π΄ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ...

  break;

 case MY_PULSE_HWINT:

  // Π˜ΠΌΠΏΡƒΠ»ΡŒΡ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° прСрывания.

  // Надо Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π² ΠΏΠΎΠ»Π΅ Β«valueΒ»...

  val = msg.pulse.value.sival_int;

  // Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ...

  break;

 case _PULSE_CODE_UNBLOCK:

  // Π­Ρ‚ΠΎ ΠΈΠΌΠΏΡƒΠ»ΡŒΡ ΠΎΡ‚ ядра, Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

  // Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ...

  break;

   //ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅...

 }

} else { // ΠžΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ сообщСниС

 // ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ сообщСния

 // ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ

}

Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ прСдполагаСтся, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ описали структуру msg Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° содСрТала элСмСнт Β«struct _pulse pulse;Β», ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ константы MY_PULSE_TIMER ΠΈ MY_PULSE_HWINT. Код ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ° _PULSE_CODE_UNBLOCK β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ‚Π΅Ρ… самых ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ², Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… для ядра, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ упомянуто Π²Ρ‹ΡˆΠ΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список этих ΠΊΠΎΠ΄ΠΎΠ² (Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС поля value) Π² <sys/neutrino.h>.

Ѐункция MsgReceivePulse()

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ MsgReceive() ΠΈ MsgReceivev() ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ стандартноС сообщСниС, Π»ΠΈΠ±ΠΎ ΠΈΠΌΠΏΡƒΠ»ΡŒΡ. Однако, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ситуации, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠΎΠΆΠ΅Π»Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΡ‹. Π›ΡƒΡ‡ΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ этого являСтся ситуация с сСрвСром, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ приняли запрос ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‡Π΅Π³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ этот запрос сразу (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠ·-Π·Π° Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, связанной с Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ срСдствами). Π’ Ρ‚Π°ΠΊΠΈΡ… случаях слСдуСт, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ срСдства (ΠΈΠ»ΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€, ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Π΅) Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π²Π°ΠΌ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ° всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° происходит Π½Π΅ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ событиС.

Если Π²Ρ‹ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ваш сСрвСр ΠΏΠΎ стандартной схСмС Β«ΠΆΠ΄Π°Ρ‚ΡŒ сообщСния Π² бСсконСчном Ρ†ΠΈΠΊΠ»Π΅Β», Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π² ситуации, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ посылаСт Π²Π°ΠΌ запрос, Π° ΠΏΠΎΡ‚ΠΎΠΌ, ΠΏΠΎΠΊΠ° Π²Ρ‹ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚Π΅ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ± ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ запроса, ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ запрос ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’ΠΎΠΎΠ±Ρ‰Π΅ говоря, это ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ β€” Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ мноТСство ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Однако, Ρƒ вас ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ вСскиС основания ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π² обслуТивании β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли обслуТиваниС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° слишком рСсурсоСмко, ΠΈ Π½Π°Π΄ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ‡ΠΈΡΠ»Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡƒΡ€Ρ‹.

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π²Π°ΠΌ потрСбуСтся ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Β«Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎΠ³ΠΎΒ» ΠΏΡ€ΠΈΠ΅ΠΌΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ². Π’ΡƒΡ‚-Ρ‚ΠΎ ΠΈ становится Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ функция MsgReceivePulse():

#include <sys/neutrino.h>


int MsgReceivePulse(int chid, void *rmsg, int rbytes,

 struct _msg_info *info);

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π΅Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚Π΅ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MsgReceive() β€” ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠ°Π½Π°Π»Π°, Π±ΡƒΡ„Π΅Ρ€ (ΠΈ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€), ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ info β€” ΠΌΡ‹ обсуТдали Π΅Π³ΠΎ Π² ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π΅ Β«ΠšΡ‚ΠΎ послал сообщСниС?Β» Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ info Π½Π΅ примСняСтся Π² ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ°Ρ…. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ прСдставлСн Π² спискС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠžΡ‚Π²Π΅Ρ‚ нСзамысловат: Ρ‚Π°ΠΊ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ NULL!

Ѐункция MgsReceivePulse() способна ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΡ‹. Π’Π°ΠΊ, Ссли Π±Ρ‹ Ρƒ вас Π±Ρ‹Π» ΠΊΠ°Π½Π°Π» с мноТСством ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° Π½Π΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MsgReceivePulse() (ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π½Π° Π½Π΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MsgReceive()), ΠΈ Π½Π΅ΠΊΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ попытался Π±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π²Π°ΡˆΠ΅ΠΌΡƒ сСрвСру сообщСниС, Ρ‚ΠΎ этот ΠΊΠ»ΠΈΠ΅Π½Ρ‚ остался Π±Ρ‹ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ (Send-blocked) Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ сСрвСра Π½Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ MsgReceive(). Π’Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ функция MsgReceivePulse() Π±ΡƒΠ΄Π΅Ρ‚ спокойно ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΡ‹.

ЕдинствСнноС, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ совмСстном ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ MsgReceivePulse() ΠΈ MsgReceive(), β€” Ρ‡Ρ‚ΠΎ функция MsgReceivePulse() обСспСчит ΠΏΡ€ΠΈΠ΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ². Ѐункция MsgReceive() смоТСт ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΡ‹, Ρ‚Π°ΠΊ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ сообщСния! Π­Ρ‚ΠΎ происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MsgReceivePulse() Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для случаСв, Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ сСрвСром ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… сообщСний.

Π­Ρ‚ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π² Π·Π°ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ. Π’Π°ΠΊ ΠΊΠ°ΠΊ функция MsgReceive() ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ сообщСния, ΠΈ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΡ‹, Π° функция MsgReceivePulse() ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΡ‹, Ρ‚ΠΎ ΠΊΠ°ΠΊ Π±Ρ‹Ρ‚ΡŒ с сСрвСром, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΎΠ±Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ? ΠžΠ±Ρ‰ΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ. Π£ вас Π΅ΡΡ‚ΡŒ ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… MsgReceive(). Π­Ρ‚ΠΎΡ‚ ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² β€” это зависит ΠΎΡ‚ числа ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ) ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ запросов ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ‡ΠΈΡΠ»Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²- ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΈΠ· этих ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ оборудования ΠΈΠ»ΠΈ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°), Π²Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΏΠΎΡ‚ΠΎΠΊ-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MsgReceivePulse(). Ѐункция MsgReceivePulse() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΡ‹, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ° Π²Ρ‹ ΠΆΠ΄Π΅Ρ‚Π΅ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ°, ΠΊ Π²Π°ΠΌ Π½Π΅Π½Π°Ρ€ΠΎΠΊΠΎΠΌ Π½Π΅ просочится Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ клиСнтский запрос.

Ѐункция MsgDeliverEvent()

Как Π±Ρ‹Π»ΠΎ упомянуто Π²Ρ‹ΡˆΠ΅ Π² ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π΅ Β«Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΎΠ±ΠΌΠ΅Π½Π°Β», ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ситуации, ΠΊΠΎΠ³Π΄Π° приходится Π½Π°Ρ€ΡƒΡˆΠ°Ρ‚ΡŒ СстСствСнноС Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡.

Π’Π°ΠΊΠΎΠΉ случай Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½, ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ посылаСт сСрвСру сообщСниС ΠΈ ΠΏΡ€ΠΈ этом Π½Π΅ Ρ…ΠΎΡ‡Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ частично Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΏΡƒΡ‚Π΅ΠΌ примСнСния ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², выдСляя Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ для Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² сСрвСра, Π½ΠΎ это Π½Π΅ всСгда с успСхом Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… систСмах, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ большом количСствС сСрвСров количСство ΠΆΠ΄ΡƒΡ‰ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π±Ρ‹Π»ΠΎ Π±Ρ‹ слишком Π²Π΅Π»ΠΈΠΊΠΎ. Но допустим, Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ здСсь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, Π° вмСсто этого Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сСрвСр ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ» ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ сразу, ΠΈ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Β«Π—Π°ΠΊΠ°Π· принят; я скоро Π²Π΅Ρ€Π½ΡƒΡΡŒΒ». Π—Π΄Π΅ΡΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сСрвСр ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ», ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ свободСн ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ сСрвСр ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ запрос ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π΅ΠΌΡƒ потрСбуСтся ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Β«ΠŸΡ€ΠΎΡΠ½ΠΈΡΡŒ, Π²ΠΎΡ‚ Ρ‚Π²ΠΎΠΉ Π·Π°ΠΊΠ°Π·.Β» ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ это ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ иСрархичСского ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° ΠΎΠ±ΠΌΠ΅Π½Π°, сСрвСр Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ сообщСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ссли ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π² это ΠΆΠ΅ врСмя ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ сообщСниС сСрвСру, это ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Π·Π°ΠΈΠΌΠ½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΆΠ΅ сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ сообщСниС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π±Π΅Π· Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ иСрархичСского ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°?