Сервис рассылки сообщений

Установка php-ws

1 Папка с программой распространяется с основным обновлением программы, путь = /tools/php-ws.

2 Переименовать файл config.php.tmpl в config.php и при необходимости отредактировать его, значение параметров в конфиге прокоментировано.

3 В программе на форме «Настройки сообщений пользователям» прописать адреса вебсокет сервиса и сервиса API сообщений

Пример настроек установленного сервиса

Параметр Значение
Адрес внутреннего сервера МФЦ 192.168.1.100
папка внутреннего веб сервера /var/www/mfc-in/
папка сервиса php-ws /var/www/mfc-in/tools/php-ws
Настройка в программе «адрес сервиса» ws://192.168.1.100:8000/websocket/messages
Настройка в программе «адрес API сообщений» http://192.168.1.100:11234

конфиг php-ws (config.php)

define('MFCPATH', __DIR__ . '/../mfc-in');
define('DEFAULT_ALIVE', 3600);
define('DEFAULT_PERIOD_SHOW', 20);
define('DBLOOPTIME', 3);
define('WSPORT', 8000);
define('APIHTTPPORT',11234);
define('VERSION', file_get_contents( __DIR__ .'/version.txt'));

Запуск php-ws

Запуск производится из командной строки

пример:
папка с программой лежит в /var/www/mfc-in/tools/php-ws

  • открываем терминал

  • переходим в папку с программой cd /var/www/mfc-in/tools/php-ws

  • запускаем сервер в debug режиме php index.php start

должна получиться следующая картина

  • проверяем работу системы в целом — идем в форму «Менеджер-рассылка сообщений» и отправляем сообщение себе, в течение нескольких секунд оно должно отобразиться. В случае каких — либо проблем(некорректные настройки, права...) в окне терминала будут появляться ошибки

Когда проверка пройдена можно отключить сервер (CTRL+C) в окне терминала и перезапустить сервер продуктивном режиме — в команду дописывается -d. php index.php start -d после запуска в продуктивном режиме окно терминала можно закрыть.

Проверить работу программы можно с помощью команды php index.php status

пример её результата

Дополнительно

В случае завершения работы сервера на форме рассылки сообщений появится соответствующий значек, по клику на него можно посмотреть подробности ошибки

Иногда нужно перезапускать сервер(например при изменении конфигурации) сделать это можно следующим образом:
Выключить сервер можно с помощью команды php index.php stop Действия в случае проблем с остановкой службы

  • находим PID процесса ps -Af | grep WorkerMan результат :

  • видим 2 процесса — 6309 и его дочерний 6310, (6571 — это собственно сам поиск процесса).

  • Принудительно уничтожаем процессы sudo kill -9 6309 sudo kill -9 6310

9 — означает наивысший приоритет завершения процесса

Возможные ошибки:

  • error opcode XX - встречалось на виндовых серверах. Решение - в php.ini установили mbstring.func_overload=0.

  • frame not masked so close the connection - встречалось на линуксовых серверах. Решение - в php.ini установили mbstring.func_overload=0.

Если в системе 1 файл php.ini, то нужно его скопировать с другим именем, поменять mbstring.func_overload=0, и запускать сервис с указанием этого измененного конфига вот пример команды

php -c /etc/php/php-for-ws.ini index.php start

  • error pcntl - на линуксовых серверах. Доустановили apt-get install php5-pcntl.

  • На форме рассылки сообщений написано, что всё работает, но сообщения не отправляются - проверить с помощью php index.php status есть ли соединения — если нет, значит браузер не может соединиться с сервером. Методика поиска проблемы : Попробовать соединиться вручную из консоли браузера ws.connect(-=строка из настройки «адрес сервера сообщений»=-), после этого значение ws.connection должно быть не пустое, или new WebSocket(-=строка из настройки «адрес сервера сообщений»=-), должен вернуть объект соединения. Если при этом возвращается ошибка — разбираться с ней. Были замечены следующие ошибки :

    • The operation is insecure — решение — заходим в настройки браузера (about:config), находим параметр network.websocket.allowInsecureFromHTTPS, устанавливаем ему значение «true».
  • При запросе из карточки ошибка, что сервис не настроен - Возможна такая ситуация, когда сервис запущен, но сообщения не отправляются, а при запросе из карточки говорит что сервис не настроен. Методика поиска проблемы : В консоли браузера набрать ws.connection.ReadyState должно вернуть 1. Если вернулось значение например 3, то возможно стандартный порт 8000 чем то занят. Измените порт в конфиге php-ws и в настройках АИС, например на 8500 и перезапустите сервис.