环境
win7
thinkphp 5.0
think-worker 1.0.*
今天在thinkphp 5.0上使用workman
参照官网教程步骤如下
安装think-worker 1.0.*版本
composer require topthink/think-worker 1.0.*
使用方法
首先创建控制器类并继承 thinkworkerServer,然后设置属性和添加回调方法,支持workerman所有的回调方法定义(回调方法必须是public类型)
namespace appindexcontroller; use thinkworkerServer; class Worker extends Server { protected $socket = 'http://0.0.0.0:2346'; public function onMessage($connection,$data) { $connection->send(json_encode($data)); } }
在应用根目录增加入口文件 server.php
#!/usr/bin/env php <?php define('APP_PATH', __DIR__ . '/application/'); define('BIND_MODULE','index/Worker'); // 加载框架引导文件 require __DIR__ . '/thinkphp/start.php';
在命令行启动服务端
php server.php start
linux下面可以支持下面指令
php server.php start|stop|status|restart|reload
执行php server.php start后报错
[thinkexceptionErrorException] Class 'thinkworkerServer' not found
找了一些资料,说的是composer问题、大小写问题等等,都没有解决
报错原因分析:没有加载到类thinkworkerServer
解决办法:
既然没有加载到这个类,那我加载一下不就行了,修改server.php
server.php文件代码:
#!/usr/bin/env php <?php define('APP_PATH', __DIR__ . '/application/'); define('BIND_MODULE','index/Worker'); //加载composer autoload文件 require __DIR__ . '/vendor/autoload.php'; // 加载框架引导文件 require __DIR__ . '/thinkphp/start.php';
保存后,执行php server.php start,出现如下内容:
----------------------- WORKERMAN ----------------------------- Workerman version:3.5.30 PHP version:5.6.9 ------------------------ WORKERS ------------------------------- worker listen processes status none http://0.0.0.0:2346 4 [ok]
成功开启websocket服务,问题解决。
参考文档:
1.think-worker 1.0官网使用教程
https://github.com/top-think/think-worker/tree/v1.0.1