当前位置:   article > 正文

thinkphp5 workerman极简配置方案_thinkphp workerman

thinkphp workerman

背景

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

	1.安装wokerman
	2.配置启动器
	3.配置controller
	4.启动websocket服务
	5.客户端调用
  • 1
  • 2
  • 3
  • 4
  • 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';
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

很多文章中另外配置了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)
    {
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

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

4.启动websocket服务

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

php server.php start
  • 1

如果需要常驻后台

nohup php server.php start
  • 1

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

客户端

直接调用即可

ws = new WebSocket("ws://<你的域名>:2346");
ws.onopen = function() {
    console.log("连接成功 ");
};
ws.onmessage = function(e) {
    console.log("收到服务端的消息:" + e.data);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

1.php 启动server失败问题

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

2.客户端连接失败

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/309465
推荐阅读
相关标签
  

闽ICP备14008679号