Skip to end of metadata
Go to start of metadata

websocket_backend.pl

Демон, в котором собираются все долгоживущие процессы.

startзапустить в режиме демона
stopостановить демон
restartперезапустить
statusпроверить, запущен ли демон


На данный момент обрабатывает:


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

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

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

  • mod_proxy

  • mod_proxy_wstunnel

Для Ubuntu, Debian

a2enmod proxy
a2enmod proxy_wstunnel

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

/usr/abills/misc/apache/abills_httpd.conf
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

Включать при загрузке

FreeBSD

fetch -o /usr/local/etc/rc.d/abills_websocket http://abills.net.ua/misc/abills_websocket_rc.d
chmod +x /usr/local/etc/rc.d/abills_websocket

Debian/Ubuntu/CentOS

Можно просто прописать в /etc/rc.local ( Задержка нужна для того, чтобы загрузилась MySQL)

(sleep 5 && /usr/abills/libexec/websocket_backend.pl -d) &

Или установить как службу 

/etc/systemd/system/abills-backend.service

В строке :

ExecStartPre=/bin/chown -R $nobody /usr/abills/var/

$nobody - пользователь веб сервера, то есть :

www-data, www, apache - в зависимости от типа ОС

[Unit]
Description=ABillS Websocket Server
After=network.target
After=mysql.service
Requires=mysql.service

[Service]
Type=forking

PIDFile=/usr/abills/var/log/websocket_backend.pid

ExecStartPre=/bin/chown -R $nobody /usr/abills/var/
ExecStart=/usr/abills/libexec/websocket_backend.pl -d
ExecReload=/usr/abills/libexec/websocket_backend.pl stop

[Install]
WantedBy=multi-user.target


Включить службу

systemctl enable abills-backend.service
systemctl start abills-backend.service

Автоматический перезапуск процеса

Благодаря billd-плагину check_programs можно перезапускать процесс и получать уведомления о неактивности
/etc/crontab

 */5 * * * * root /usr/abills/libexec/billd check_programs PROGRAMS=websocket


Возможные проблемы

Не установлен systemd
Решения:

  • установить systemd

  • Использовать rc.d скрипт

Ошибки с mysql.service
Если в системе есть systemd, а вместо mysql, установлена mariadb, служба может называться mariadb.service, переименуйте зависимую службу.
Если система не поддерживает запуск mysql через systemd, используйте init.d скрипт. 

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

libexec/config.pl


$conf{WEBSOCKET_ENABLED} = 1;Включить websocket
$conf{WEBSOCKET_URL} = '127.0.0.1:9443/admin/wss/';кастомный URL для WebSocket
$conf{WEBSOCKET_DEBUG}=5;Режим отладки
$conf{WEBSOCKET_PORT}='19443';

websocket port.

по умолчанию: 19443

$conf{USER_WEBSOCKET_PORT}='19445';

Порт абонента.

По умолчанию: 19445

$conf{WEBSOCKET_INTERNAL_PORT}='19444';

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

По умолчанию: 19444

Тестирование

cd /usr/abills/t/
perl websocket.t AID=1