workerman+ssl+tp5服务端

一早上,所有的错误代码都遇上了,老扎心了

配置环境

官网文档环境要求
按照说明文档,查询了下,

curl -Ss http://www.workerman.net/check.php | php

发现少了个posix扩展,老习惯,有问题,百度下(原谅我是只不称职程序猿,懒得爬树翻墙了)
网上一大堆yum install php-process,文章抄文章,还写原创的,好吧,千千万万的同种坑。
正确姿势:
1、查询php版本 php -version
在这里插入图片描述
然后就根据查询到的版本查找:yum search php70w(70就是你的版本号)
在这里插入图片描述
安装对应包:yum install php70w-process.x86_64
当然,这也不一定能解决问题,不过起码对于其他的直接yum install php-process安装稳当,因为默认安装的话,是php5x的版本

服务端配置

接下来的服务端配置,依然是一脸懵逼(毕竟之前没接触过workerman),同样,找教程tp5集成workerman,我服务端用的是tp5框架,文章还是搜索引擎前面的文章。
大概说就是,先安装think-worker,要composer安装,npm安装之类的,但是,打开tp5的composer.json可以看到
在这里插入图片描述
已经默认装配了,然后是要写一个controller配置,这个控制器继承think\worker\Server(这是think-worker的封装了)只要配置属性$socket就可以了,然后在项目根目录下创建一个启动文件start.php,将刚才写的控制器define到入口define('BIND_MODULE','namespace/controller');
发布,运行php start.php start ( -d 加不加就是守护与非守护进程区别),这时,你会发现,workerman运行成功了。
但是,这时ws的配置(当然也可以配置http)
我要的wss呢?

开启ssl

openssl的安装、证书的申请配置这里就不说了。
今天经历了各种错误,按我记得的顺序整理下:

  • 超时,可能是端口没开启(我用的是云服务器,我打开对应端口就可以了)
  • net::ERR_SSL_PROTOCOL_ERROR,ssl问题,网上找了下,各种解决方法,看的比较杂乱,不过也大概理解了:
    可能是worker启动姿势有问题,打开我们的控制器,它继承了Server,追踪它
abstract class Server
{
    protected $worker;
    protected $socket    = '';
    protected $protocol  = 'http';
    protected $host      = '0.0.0.0';
    protected $port      = '2346';
    protected $processes = 4;

    /**
     * 架构函数
     * @access public
     */
    public function __construct()
    {
        // 实例化 Websocket 服务
        $this->worker = new Worker($this->socket ?: $this->protocol . '://' . $this->host . ':' . $this->port);
       
        // 设置进程数
        $this->worker->count = $this->processes;
        // 初始化
        $this->init();

        // 设置回调
        foreach (['onWorkerStart', 'onConnect', 'onMessage', 'onClose', 'onError', 'onBufferFull', 'onBufferDrain', 'onWorkerStop', 'onWorkerReload'] as $event) {
            if (method_exists($this, $event)) {
                $this->worker->$event = [$this, $event];
            }
        }
        // Run worker
        Worker::runAll();
    }

    protected function init()
    {
    }
}

可以看到,worker对象创建过程,但是并没有配置ssl,那么只要在构建worker对象时,开启ssl就可以了

$context = array(
            'ssl'   =>  array(
            //这里要用绝对路径
                'local_cert'    =>  'crt/pem',
                'local_pk'      =>  'key',
                'verify_peer'   =>  false
            )
        );
$this->worker = new Worker($this->socket ?: $this->protocol . '://' . $this->host . ':' . $this->port,$context);
...
protected function init()
 {
     $this->worker->transport = 'ssl';
 }

字段不懂可以看php官方文档:SSL 上下文选项

emmmm,写着写着有点失忆了,遇到的问题有一些忘了,不过解决流程整体是完整的,中间调试过程中走了不少弯路,整个过程大概也就是这样了,开始觉得挺麻烦的,实际上倒也是不难。。

3.5日才发现官网文档是有说明的!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值