thinkphp5 workerman 配置方案

背景
thinkphp项目中要用到实时传输,小伙伴觉得功能简单,使用轮询的方式,觉得一来消耗资源,二来不够优雅,所以还是决定用websocket,之前也对比了长链接,SSE等,最终还是选择了websocket一步到位。
很多人说websocket后台配置麻烦,其实实际操作的时候发现网上很多文章写的已经够简洁了,但是缺少一张地图,所以很多人看的一头雾水,有了地图,就非常简单明了了。

	1.安装wokerman
	2.配置启动器
	3.配置controller
	4.启动websocket服务
	5.客户端调用

 

服务器端


1.安装wokerman
安装方式官网推荐使用composer,在项目根目录下运行
composer require topthink/think-worker -vvv
有小伙伴说一直不习惯用composer,那你就直接下载workerman后拷贝到vendor文件夹使用

2.配置启动器
在项目根目录下创建文件server.php
 

<?php
#!/usr/bin/env php
define('APP_PATH', __DIR__ . '/application/');
define('BIND_MODULE','index/Worker');
// 加载框架引导文件
require __DIR__ . '/thinkphp/start.php';

很多文章中另外配置了namespace,我觉得不太符合小项目的使用习惯就还是放在了index中,如要修改记得与后面的controller配置保持一致

3.配置controller
这一步就是新建一个controller,我这里是直接在演示文件夹默认的/index/controller中创建了的Worker.php

<?php
namespace app\index\controller;
use think\worker\Server;
class Worker extends Server{
  protected $socket = 'websocket://0.0.0.0:2346';	//公网就用0.0.0.0,自用就用127.0.0.1
    public function onMessage($connection, $data)
    {
        $connection->send('你给我发送了:'.$data);
    }
    /**
     * 当连接建立时触发的回调函数
     * @param $connection
     */
    public function onConnect($connection)
    {
    }
    /**
     * 当连接断开时触发的回调函数
     * @param $connection
     */
    public function onClose($connection)
    {
    }
    /**
     * 当客户端的连接上发生错误时触发
     * @param $connection
     * @param $code
     * @param $msg
     */
    public function onError($connection, $code, $msg)
    {
        echo "error $code $msg\n";
    }
    /**
     * 每个进程启动
     * @param $worker
     */
    public function onWorkerStart($worker)
    {
    }
}

这一步很多人出问题出在ip上,也是我看很多文章中没有写的,自用就写127.0.0.1,但是大部分小伙伴应该是配置在公网上的,公网就写‘0.0.0.0’,端口自己定义,如果是服务器上记得防火墙打开这个端口

4.启动websocket服务
1-3步完成后就可以打开websocket服务了,在项目根目录运行

php server.php start

如果需要常驻后台

nohup php server.php start

显示start success就可以了,如果报错优先检查IP,不是IP问题再好好看报错信息。

客户端

直接调用即可
ws = new WebSocket("ws://<你的域名>:2346");
ws.onopen = function() {
    console.log("连接成功 ");
};
ws.onmessage = function(e) {
    console.log("收到服务端的消息:" + e.data);
}


1.php 启动server失败问题
问题不多,认真看下报错就可以,主要问题一般是workerman没有安装好或拷贝好,重新删掉安装一下就好,其次是ip配置问题,这个我刚开始也遇到了,记得公网是0,0,0,0就行,好多人找我都是卡在这里的。

2.客户端连接失败
这个问题会比较多一点,基本排查流程是先看服务端websocket有没有启动成功,如果成功了,那检查网络端口有没有开放,尤其是阿里云用户,好几个问我的都是阿里云的安全策略没把端口开放出来。然后再检查客户端设置,因为客户端太简单了,一般问题不怎么会出在这边。
 


————————————————
版权声明:本文为CSDN博主「大雄丸」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/latinhui/article/details/122490132

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值