You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
3.1 KiB
98 lines
3.1 KiB
<?php
|
|
|
|
namespace addons\shopro\library\chat;
|
|
|
|
use GatewayWorker\BusinessWorker;
|
|
use GatewayWorker\Gateway;
|
|
use GatewayWorker\Register;
|
|
use Workerman\Worker;
|
|
|
|
/**
|
|
* 启动 gateway
|
|
*/
|
|
class Start
|
|
{
|
|
public $config = null;
|
|
|
|
public function __construct() {
|
|
$this->config = Online::getConfig('system');
|
|
}
|
|
|
|
|
|
// 启动 register
|
|
public function register () {
|
|
$register = new Register('text://0.0.0.0:' . $this->config['business_worker_port']);
|
|
}
|
|
|
|
|
|
// 启动 businessWorker
|
|
public function businessWorker() {
|
|
// bussinessWorker 进程
|
|
$worker = new BusinessWorker();
|
|
// worker名称
|
|
$worker->name = 'ShoproChatBusinessWorker';
|
|
// bussinessWorker进程数量
|
|
$worker->count = $this->config['business_worker_num'];
|
|
// 服务注册地址
|
|
$worker->registerAddress = '127.0.0.1:' . $this->config['business_worker_port'];
|
|
//设置Event 类
|
|
$worker->eventHandler = 'addons\shopro\library\chat\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'] ?? '';
|
|
|
|
$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:" . $this->config['gateway_port'], $context);
|
|
|
|
if ($is_ssl && $ssl_type == 'cert') {
|
|
// 开启 ssl 传输
|
|
$gateway->transport = 'ssl';
|
|
}
|
|
|
|
// gateway名称,status方便查看
|
|
$gateway->name = 'ShoproChatGateway';
|
|
// gateway进程数
|
|
$gateway->count = $this->config['gateway_num'];
|
|
// 本机ip,分布式部署时使用内网ip
|
|
$gateway->lanIp = '127.0.0.1';
|
|
// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
|
|
// 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口
|
|
$gateway->startPort = $this->config['gateway_start_port'];
|
|
// 服务注册地址
|
|
$gateway->registerAddress = '127.0.0.1:' . $this->config['business_worker_port'];
|
|
|
|
// 心跳间隔
|
|
$gateway->pingInterval = 30;
|
|
// 心跳数据
|
|
$gateway->pingData = ''; // 客户端定时发送心跳
|
|
// 客户端在30秒内有1次未回复就断开连接
|
|
$gateway->pingNotResponseLimit = 3;
|
|
}
|
|
|
|
|
|
|
|
// 设置日志
|
|
public function setLog($basePath) {
|
|
// 日志文件
|
|
Worker::$logFile = $basePath . 'library/chat/log/shopro_chat.log';
|
|
// Worker::$stdoutFile = $basePath . 'library/chat/log/std_out.log'; // 如果部署的时候部署错误(比如未删除php禁用函数),会产生大量日志,先关掉
|
|
Worker::$pidFile = $basePath . 'library/chat/log/shopro_chat.pid';
|
|
}
|
|
}
|
|
|