Это старая версия документа.


Browser ( WebSocket )

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

Сервер websoket_backend реализован асинхронно на AnyEvent.

Установка сервера WebSocket

Установить perl модули:

  • AnyEvent::Socket
  • AnyEvent::Handle
  • Protocol::WebSocket

Установить и включить модули апача:

  • mod_proxy
  • mod_proxy_wstunnel

Прописать в конфигурацию apache2 abills_httpd в секцию VirtualHost биллинга

  ProxyPass "/admin/wss/" "ws://127.0.0.1:19443/wss/admin/" retry=1

Установить и включить сервер вебсокетов

ln -s /usr/abills/misc/websocket_backend.pl /usr/abills/libexec/websocket_backend.pl
chmod +x /usr/abills/libexec/websocket_backend.pl
iptables -I INPUT 1 -p tcp --dport 19443 -j ACCEPT

Включать при загрузке /etc/rc.local

/usr/abills/libexec/websocket_backend.pl -d

Конфигурация

libexec/config.pl

^$conf{WEBSOCKET_URL} = 'wss://%host.example.com%/admin/wss/'|URL WebSocket сервера |

Abills::Sender::Browser API

Методы

is_connected() Проверяет внутреннее соединение с WebSocket сервером
has_connected_admin($aid) Проверяет, есть ли admin на линии (подключился ли его браузер к серверу)
send_message({ AID ⇒ 1, MESSAGE ⇒ $json_message }) Отправляет $json_message указаному администратору, формат сообщений

Пример отправки сообщения администратору:

use Abills::Sender::Browser
my $Browser = Abills::Sender::Browser->new( $db, $admin, \%conf);

my $test_aid = 1;
my $test_notification = <<"TEST_NOTIFICATION";
{
  "TYPE" : "MESSAGE",
  "TITLE" : "Test notification",
  "TEXT" : "Just<br/>some<br/>text"
}
TEST_NOTIFICATION


# Проверяем, что админ есть на линии
my $test_admin_connected = $Browser->has_connected_admin( $test_aid );

my $received = 0;
if ( $test_admin_connected ){
  $received = $Browser->send_message( { AID => $test_aid, MESSAGE => $test_notification } );
}
else {
  print "Admin $test_aid is not online \n"
  return 0;
}

return $received;

Когда сообщение приходит в браузер администратора, оно передаётся AMesssageChecker.

Расширение обработчиков сообщений AMessageChecker