欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Swoole中多端口推送、日志记录、负载均衡

程序员文章站 2022-05-18 16:04:33
...

多端口推送

聊天室为一个终端ws://localhost:8812

直播员实时发送数据为另一个终端ws://localhost:8812

两者push数据到终端进行推送

把对终端的连接写在js文件中,引入页面,使得页面与服务器保持长连接。

为了同时使用两个终端进行数据实时推送,服务器需要开启两个端口

Swoole中多端口推送、日志记录、负载均衡

 

一个连接对象,开启两个端口

$_POST[‘http_server’]-> ports[1]   //端口从0开始算起

 

//开启的端口数从0开始排序,遍历的元素为单个连接的fd

foreach($_POST['http_server']->ports[1]->connections as $fd) {
    $_POST['http_server']->push($fd, json_encode($data));
}

//fd为顺序序列,不可重复,多端口公用序列,用fd可识别出是哪个端口的终端

想要使用connections迭代器需要重新编译swoole

安装pcre之后,安装openssl等环境          此处安装的是pcre,不是pcre2

重新编译./configure –with-php-config=/…  --enable-openssl --enable-http2 --enable-async-redis

sudo ./configure \

            --with-php-config=/usr/local/php/bin/php-config \

            --enable-openssl  \

            --enable-http2  \

            --enable-async-redis \

            --enable-sockets \

            --enable-mysqlnd


对某服务端口进行实时监控并输出或记录

//希尔脚本

$shell = "netstat -anp 2>/dev/null | grep ".self::PORT . " | grep LISTEN | wc -1";

//使用定时器监控,两秒一次

swoole_timer_tick(2000, function($timer_id) {
      (new Server())->port();
      echo "time-start".PHP_EOL;
});

 

可以把内容不输出到终端,写在文件中

nohup  /home/work/hdtocs/../php  /home/work/…/server.php  > /home/work/../a.txt &

 

命令行这样执行则会持续监控并把信息写入a.txt


负载均衡

Swoole中多端口推送、日志记录、负载均衡

 

nginx安装

登录官网:http://nginx.org/   下载压缩包

解压

tar  -zxvf  [xxx]

使用./configure  --help  查看需要哪些配置

./configure  --prefix=/home/work/study/soft/nginx  --sbin-path=/home/work/study/soft/nginx/sbin/nginx  --conf-path=/home/work/study/soft/nginx/config/nginx.conf  --error-log-path=/home/work/study/soft/nginx/logs/error.log  --pid-path=/home/work/study/soft/nginx/logs/nginx.pid  --http-log-path=/home/work/study/soft/nginx/logs/access.log

make  -j

make  install

 

安装过程中可能出现pcre的问题

安装pcre-devel解决问题

yum -y install pcre-devel

遇见openssl 问题

yum -y install openssl openssl-devel

 

安装完成后需要修改配置文件nginx.conf

开启pid

根据个人情况开启日志

 

启动nginx

./sbin/nginx

 

通过nginx访问项目下面的静态页面

修改nginx.conf文件的默认访问目录

修改后需要在conf头部加入(如下)

user root;

 

设置nginx服务和swoole服务器的转发

当请求的页面在nginx服务器不存在时,转发到swoole服务器php逻辑,返回结果给nginx,nginx返回给用户

Swoole中多端口推送、日志记录、负载均衡

 

在nginx.conf文件下配置

请求文件不存在时,转发swoole服务器

PS:if后必须有一个空格,语句必须分号结尾

普通模式的配置需要使用正则进行判断s=…

 

把处理逻辑放在两台以上服务器,负载均衡

分流访问,weight=2, weight=2 均衡负载

 

负载均衡demo:

把swoole服务器代码拷贝一份,开启不同端口,修改控制器输出内容。

Swoole中多端口推送、日志记录、负载均衡

Swoole中多端口推送、日志记录、负载均衡

weight=2;

weight=2;

代表两台服务器负载相同,2:2

访问同个页面刷新输出内容不同

 

相关标签: PHP Swoole