目录
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
启动成功:
如果启动了报错需要关闭
关闭命令:(直接关闭所有进程)
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/;
}
访问方式:
域名+端口号即可
网页内容:
这就为成功