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

多端口推送

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

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

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

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

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

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

$_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等环境

重新编译./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


负载均衡

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返回给用户

在nginx.conf文件下配置

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

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

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

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

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

负载均衡demo:

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

weight=2;

weight=2;

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

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

猜你喜欢

转载自blog.csdn.net/qq_36289732/article/details/82596446