目录

websocket

插架下载下来:

启动命令

注:如修改文件内容需重启websocket

注:对应的端口号需要开启

注:禁用函数

Ws

修改配置:

前端js:

Wss

修改配置:

注:修改过配置需重启

Nginx配置

访问方式:


websocket

用的shopro中的插架:

插架下载下来:

composer 下载

composer require workerman/gateway-worker:~3.0

禁用函数:

直接把禁用函数全部禁用拉倒了

Putenv

shell_exec

proc_open

pcntl_alarm

pcntl_fork

pcntl_wait

pcntl_signal

pcntl_signal_dispatch

启动命令

它启动后不能停止的我们 可以利用宝塔的计划任务

Shell脚本:

执行一下命令

解释:

进入目录

cd /data/www/fangwu.blalgo.com/

启动命令:

php think chat start

Shell命令:

cd /data/www/fangwu.blalgo.com/ && php think chat start

启动成功:

宝塔 docker文件权限 宝塔开启websocket_php

 

如果启动了报错需要关闭

关闭命令:(直接关闭所有进程)

killall -9 php

注:如修改文件内容需重启websocket

注:对应的端口号需要开启

注:禁用函数

Ws

修改配置:

注意端口号配置即可:

<?php
/*
@auth:raven
@date:2021/12/15 20:18
@remark:
*/

namespace addons\ws\library;

use GatewayWorker\BusinessWorker;
use GatewayWorker\Gateway;
use GatewayWorker\Register;
use Workerman\Worker;


class Start
{
    public function register()
    {
        $register = new Register('text://127.0.0.1:8801');
    }

    // 启动 businessWorker
    public function businessWorker()
    {
        // bussinessWorker 进程
        $worker = new BusinessWorker();
        // worker名称
        $worker->name = 'SwainIM';
        // bussinessWorker进程数量
        $worker->count = 4;
        // 服务注册地址
//        $worker->registerAddress = '127.0.0.1:1236';
        $worker->registerAddress = '0.0.0.0:8801';
        //设置Event 类
        $worker->eventHandler = 'addons\ws\library\Events';
    }


    // 启动 gateway
    public function gateway()
    {
//        $is_ssl   = $this->config['is_ssl'] ?? 0;
//        $ssl_type = $this->config['ssl_type'] ?? 'cert';
//        $ssl_cert = $this->config['ssl_cert'] ?? '';
//        $ssl_key  = $this->config['ssl_key'] ?? '';
//
//        $ssl_cert = '/www/server/panel/vhost/cert/fangwu.blalgo.com/fullchain.pem';//路径绝对
//        $ssl_key  = '/www/server/panel/vhost/cert/fangwu.blalgo.com/privkey.pem';//路径绝对
//
//        $context = [];
//        if ($is_ssl && $ssl_type == 'cert') {
//            // is_ssl 并且是证书模式
//            $context['ssl'] = [
//                'local_cert'  => $ssl_cert,
//                'local_pk'    => $ssl_key,
//                'verify_peer' => false
//            ];
//        }

        // gateway 进程,这里使用Text协议,可以用telnet测试 /外部链接
        $gateway = new Gateway("websocket://0.0.0.0:8702");

//        if ($is_ssl && $ssl_type == 'cert') {
//            // 开启 ssl 传输
//            $gateway->transport = 'ssl';
//        }

        // gateway名称,status方便查看
        $gateway->name = 'SwainIMGateway';
        // gateway进程数
        $gateway->count = 4;
        // 本机ip,分布式部署时使用内网ip
//        $gateway->lanIp = '127.0.0.1';
        $gateway->lanIp = '0.0.0.0';
        // 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
        // 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口javascript:;
        $gateway->startPort = 4000;
        // 服务注册地址
//        $gateway->registerAddress = '127.0.0.1:1236';
        $gateway->registerAddress = '0.0.0.0:8801';

        // 心跳间隔
        $gateway->pingInterval = 3;
        // 心跳数据
//        $gateway->pingData = '';        // 客户端定时发送心跳
        // 客户端在30秒内有1次未回复就断开连接
        $gateway->pingNotResponseLimit = 0;

        $gateway->pingData = '{"msg_type":"ping"}';
    }


    // 设置日志
    public function setLog($basePath)
    {
        // 日志文件
        Worker::$logFile    = $basePath . 'library/log/shopro_chat.log';
        Worker::$stdoutFile = $basePath . 'library/log/std_out.log';
        //如果部署的时候部署错误(比如未删除php禁用函数),会产生大量日志,先关掉
        Worker::$pidFile = $basePath . 'library/log/shopro_chat.pid';
    }


}

前端js:

BaseUrl = 'ws://91.193.103.20:8702'

直接使用ip:端口号即可

Ws到这里就结束了 比较简单

Wss

修改配置:

<?php
/*
@auth:raven
@date:2021/12/15 20:18
@remark:
*/

namespace addons\ws\library;

use GatewayWorker\BusinessWorker;
use GatewayWorker\Gateway;
use GatewayWorker\Register;
use Workerman\Worker;


class Start
{
    public function register()
    {
        $register = new Register('text://127.0.0.1:8801');
    }

    // 启动 businessWorker
    public function businessWorker()
    {
        // bussinessWorker 进程
        $worker = new BusinessWorker();
        // worker名称
        $worker->name = 'SwainIM';
        // bussinessWorker进程数量
        $worker->count = 4;
        // 服务注册地址
//        $worker->registerAddress = '127.0.0.1:1236';
        $worker->registerAddress = '0.0.0.0:8801';
        //设置Event 类
        $worker->eventHandler = 'addons\ws\library\Events';
    }


    // 启动 gateway
    public function gateway()
    {
        $is_ssl   = $this->config['is_ssl'] ?? 0;
        $ssl_type = $this->config['ssl_type'] ?? 'cert';
        $ssl_cert = $this->config['ssl_cert'] ?? '';
        $ssl_key  = $this->config['ssl_key'] ?? '';

        $is_ssl   = 1;
        $ssl_cert = '/www/server/panel/vhost/cert/fangwu.blalgo.com/fullchain.pem';//路径绝对
        $ssl_key  = '/www/server/panel/vhost/cert/fangwu.blalgo.com/privkey.pem';//路径绝对

        $context = [];
        if ($is_ssl && $ssl_type == 'cert') {
            // is_ssl 并且是证书模式
            $context['ssl'] = [
                'local_cert'  => $ssl_cert,
                'local_pk'    => $ssl_key,
                'verify_peer' => false
            ];
        }

        // gateway 进程,这里使用Text协议,可以用telnet测试 //开启wss
        $gateway = new Gateway("websocket://0.0.0.0:8702",$context);

        //ws
        //$gateway = new Gateway("websocket://0.0.0.0:8702");

        if ($is_ssl && $ssl_type == 'cert') {
            // 开启 ssl 传输
            $gateway->transport = 'ssl';
        }

        // gateway名称,status方便查看
        $gateway->name = 'SwainIMGateway';
        // gateway进程数
        $gateway->count = 4;
        // 本机ip,分布式部署时使用内网ip
//        $gateway->lanIp = '127.0.0.1';
        $gateway->lanIp = '0.0.0.0';
        // 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
        // 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口javascript:;
        $gateway->startPort = 4000;
        // 服务注册地址
//        $gateway->registerAddress = '127.0.0.1:1236';
        $gateway->registerAddress = '0.0.0.0:8801';

        // 心跳间隔
        $gateway->pingInterval = 3;
        // 心跳数据
//        $gateway->pingData = '';        // 客户端定时发送心跳
        // 客户端在30秒内有1次未回复就断开连接
        $gateway->pingNotResponseLimit = 0;

        $gateway->pingData = '{"msg_type":"ping"}';
    }


    // 设置日志
    public function setLog($basePath)
    {
        // 日志文件
        Worker::$logFile    = $basePath . 'library/log/shopro_chat.log';
        Worker::$stdoutFile = $basePath . 'library/log/std_out.log';
        //如果部署的时候部署错误(比如未删除php禁用函数),会产生大量日志,先关掉
        Worker::$pidFile = $basePath . 'library/log/shopro_chat.pid';
    }


}

注:修改过配置需重启

Nginx配置

注:端口号对应 127.0.01:8702

location /wss
{
proxy_pass http://127.0.0.1:8702;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
rewrite /wss/(.*) /$1 break;
proxy_redirect off;
}

跨域配置下(选):

最后一个为文件目录,绝对路径

location ^~/res/ {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET,POST';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
alias /data/www/fangwu.blalgo.com/;
}

访问方式:

域名+端口号即可

https://fangwu.kcad.top:8702/

网页内容:

宝塔 docker文件权限 宝塔开启websocket_php_02

 

这就为成功