Это старая версия документа.
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 указаному администратору, формат сообщений | Пример отправки сообщения администратору: <code> 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; </code> Когда сообщение приходит в браузер администратора, оно передаётся AMesssageChecker. ==== Расширение обработчиков сообщений AMessageChecker ==== * Maps (MAP_EVENT)