Socket.IO

БистСма администрированиС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с node.js Π² качСствС прокси для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сообщСний.

Π—Π°Π΄Π°Ρ‡Π° систСмы ΠΎΠ΄Π½Π°: ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° PHP-сСрвСрС событиС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (дСйствиС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ 1 Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ 2 Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы).

Вся бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… остаётся Π½Π° сторонС PHP.

Node.js Ρ‡Π°ΡΡ‚ΡŒ Π½Π΅ содСрТит Π»ΠΎΠ³ΠΈΠΊΡƒ, Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΎΠ΄ΠΈΠ½ Node.js сСрвСр для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π½Π΅ опасаясь ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π²Π·Π»ΠΎΠΌΠ°. Π‘Π΅Ρ€Π²Π΅Ρ€ http://cloud.doit-cms.ru доступСн для использования Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ сСрвиса доступСн ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° собствСнном node.js сСрвСрС https://github.com/ramainen/doit-socket.

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ свой сСрвСр, ΠΎΠ±Π»Π°ΠΊΠΎ Azure цСпляСт "ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ" Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ сСрвСра Π½Π° github.

Для использования Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ:

1. Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² шаблон страницы ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ (ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π² Ρ‚Π΅Π³Π΅ <head>):

{{socketIO#init 'http://cloud.doit-cms.ru'}}

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ использованиС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ посСтитСля:

{{socketIO#init 'http://cloud.doit-cms.ru', md5(session_id())}}

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ использованиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

{{socketIO#init}}

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вся эта затСя ΠΈΠΌΠ΅Π»Π° смысл, Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… сообщСния, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сохранСны ΠΈΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ md5(session_id())).

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ:

<!-- Π—Π΄Π΅ΡΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ клиСнтский socket.io. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ€Π°Ρ‚ΡŒ Π² любом мСстС. -->
<script src="/cms/external/socket.io.js"></script>
<script>
    var socket = io("http://cloud.doit-cms.ru");
    socket.emit("register", {
        userid: "<?php print md5(session_id()); ?>"
    });
</script>

2. ΠŸΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ событий Π½Π° клиСнсткой части:

<script>
socket.on('server_event', function (data) {
    console.log('server event');
    console.log(data);
})
socket.on('alert', function (data) {
    alert(data);
})
</script>

3. На сторонС сСрвСра ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ события (зная ID ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ):

d()->SocketIO->url='http://cloud.doit-cms.ru';
d()->SocketIO->emit('75b0390c23ecef9109e66d0b352a1a66','server_event');

d()->SocketIO->url='http://cloud.doit-cms.ru';
d()->SocketIO->emit('75b0390c23ecef9109e66d0b352a1a66','alert');

//a98166839163afd20a4be56fa3e60d13 - ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (md5(session_id())), ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ
d()->SocketIO->emit('a98166839163afd20a4be56fa3e60d13','server_event', array('Вася','ΠΏΡƒΠΏΠΊΠΈΠ½'));
d()->SocketIO->emit('a98166839163afd20a4be56fa3e60d13','server_event', array('user'=>array(1,2,3)));
d()->SocketIO->emit('a98166839163afd20a4be56fa3e60d13','alert', '123');

Для тСстирования ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€ΠΎΡƒΡ‚Π΅Ρ€:

route('/emit',function(){
    d()->SocketIO->url='http://cloud.doit-cms.ru';
    d()->SocketIO->emit('75b0390c23ecef9109e66d0b352a1a66','server_event','ΠŸΡ€ΠΈΠ²Π΅Ρ‚');
});

На этом всё.

Π’Π°ΠΊΠΆΠ΅ доступна ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ GET ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π° node.js сСрвСр Ρ‡Π΅Ρ€Π΅Π· file_get_contents.


comments powered by Disqus