我正在使用HAproxy和php websocket a link开发负载均衡的php应用程序! 用户登录我的应用程序(每个人都有自己的会话),他们发送触发执行mysql查询的表单。
我创建了后端作为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();
我怎样才能确保php websockets处理mysql查询?
问题是任务(执行查询)不是在这些服务器之间分配的(我没有看到统计报告中的变化)。 当然,我正确配置了我的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知道这些服务器。
可以使用websockets吗?或更好的解决方案是node.js?我没有看到任何与php websocket类似的解决方案。 php websocket可以与DB通信吗? 如果你知道一些关于它的文章......请告诉我。
感谢您的回答。
答案 0 :(得分:0)
在这种情况下,您需要同时运行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()
。