php - 使用 haproxy 和 php websocket 执行查询

标签 php mysql websocket haproxy

我正在使用 HAproxy 和 php websocket 开发负载平衡 php 应用程序 a link !。 用户登录到我的应用程序(每个人都有自己的 session )并发送触发执行 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();

我如何确保 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 知道这台服务器。

可以为此使用 websockets 吗?或者更好的解决方案是 node.js ?我没有看到任何与 php websocket 类似的解决方案。 php websocket可以和DB通信吗? 如果您知道一些关于它的文章...请告诉我。

感谢您的回答。

最佳答案

在这种情况下,您需要同时运行 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,以及每个配置的网络接口(interface)的地址。大多数人都想监听所有地址。

我怀疑您与 MySQL 服务器的连接绝对没有问题。问题是 $server1->run() 永远不会返回,所以永远不会执行下一行 $server2->run()

关于php - 使用 haproxy 和 php websocket 执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29983805/

相关文章:

c# - WebSocket 客户端的状态不会因网络丢失而改变

c# - Dispatcher.Invoke 更新 WPF Canvas 会导致性能问题

php - mysql request() AND后不起作用

php - 确定变量是否是 PHP 中的有效闭包

mysql - Activerecord 错误:Mysql2::Error: MySQL 服务器已消失

mysql - 在 CTE 的递归部分是否有替代方法来使用 ROW_NUMBER()?

javascript 在 onopen 事件上出现 websocket 错误

php - Joomla 管理员重定向到安装

php - 处理我的 URL 请求的正确方法

php - MYSQL PHP 排序