mysql — выполнение запросов с использованием haproxy и php websocket

Я разрабатываю php-приложение с балансировкой нагрузки, используя HAproxy и php websocket ссылка!.
Пользователи входят в мое приложение (у каждого есть свой собственный сеанс), и они отправляют форму, которая запускает выполнение запросов MySQL.

Я создал backend как три экземпляра сервера websocket, которые работают в фоновом режиме на разных IP-адресах и портах.

Класс сервера

class server {
...
}
$server1=new server('127.0.0.2','9001');
$server2=new server('127.0.0.3','9002');
$server3= new server('127.0.0.4','9003');

$server1->run(); // calling function run from library
$server2->run();
$server3->run();

Как я могу гарантировать, что MySQL-запросы будут обрабатываться php websockets?

Проблема в том, что задачи (выполнение запросов) не распределяются между этими серверами (я не вижу изменений в статистическом отчете).
Конечно, я правильно настроил свой конфигурационный файл haproxy. Я не думаю, что haproxy не может перехватить мой http-запрос и обработать его.

HAproxy интерфейс

frontend webservers
bind *:80
mode http
default_backend websockets

Бэкенд Haproxy

  backend websockets
mode http
balance roundrobin
server web1 127.0.0.2:9001  check
server web2 127.0.0.3:9002  check
server web3 127.0.0.4:9003  check

Я проверяю отчет статистики haproxy и вижу, что haproxy знает об этих серверах.

Можно ли использовать веб-сокеты для этого? или лучшим решением является node.js? Я не видел никакого подобного решения с php websocket. Может ли php websocket общаться с БД?
Если вы знаете несколько статей об этом … Дайте мне знать.

Спасибо за Ваш ответ.

1

Решение

В этом случае вам нужно запустить 3 разных скрипта одновременно. Желательно на 3 разных машинах, иначе нет смысла балансировать нагрузку.

server1.php:

<?php
require_once('./websockets.php');
class FirstServer extends WebSocketServer { ... }

$server = new FirstServer('127.0.0.2', '9001');
$server->run();

server2.php:

<?php
require_once('./websockets.php');
class SecondServer extends WebSocketServer { ... }

$server = new SecondServer('127.0.0.3', '9002');
$server->run();

server3.php:

<?php
require_once('./websockets.php');
class ThirdServer extends WebSocketServer { ... }

$server = new ThirdServer('127.0.0.4', '9003');
$server->run();

Затем в командной строке выполните следующее:

user@web1$ nohup php /path/to/server1.php > /dev/null 2>&1 &
user@web1$ ssh user@web2 "nohup php /path/to/server2.php > /dev/null 2>&1 &"user@web1$ ssh user@web3 "nohup php /path/to/server3.php > /dev/null 2>&1 &"

Немного комментариев:

$server = new Server('127.0.0.4', '9003'); должно быть $server = new Server('0.0.0.0', '9003'); если у вас нет причины (это даже не должно быть хорошей причиной … просто причина) не прослушивать все IP-адреса для этой машины. То есть каждая машина имеет 127.0.0.1, а также адрес для каждого настроенного сетевого интерфейса. Большинство людей хотят слушать по всем адресам.

Я подозреваю, что нет ничего плохого в вашем подключении к серверу MySQL. Проблема в том, что $server1->run() никогда не возвращается, поэтому никогда не выполняет следующую строку, $server2->run(),

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]