zgldh / workerboy
适用于Laravel 5的Workerman 3。
Requires
- php: >=5.4.0
- ext-sockets: *
This package is auto-updated.
Last update: 2024-08-29 03:56:05 UTC
README
请移步这里: http://workerman.net/gatewaydoc/work-with-other-frameworks/README.html
能力有限,workerboy已弃用。This package is deprecated.
Workerboy
Workerboy是Workerman3在Laravel5下的封装。
安装后即可使用Laravel的artisan命令来管理workerman。
依赖
PHP 5.4
本产品依赖PHP的"ext-sockets"扩展。Windows下无法使用。
为了提高性能,建议安装"ext-libevent"扩展。请参考: http://www.workerman.net/install
更新
- v0.15 增加了“凭证”机制,用于同步Web服务器用户ID和Socket服务器ClientId。具体请查看下面凭证机制说明。
- v0.14 修复了多workerman应用间互相冲突的bug。请注意新的config格式:
/vendor/zgldh/workerboy/config/workerboy.php
请注意每个应用的start.php
里面需要给每个worker配置config。具体请看应用模板文件/vendor/zgldh/workerboy/templates/\GatewayBusinessWorkerApplication/start.php
用法
composer require zgldh/workerboy
。- 在
config\app.php
的providers
数组添加zgldh\workerboy\WorkerBoyServiceProvider
。 php artisan vendor:publish
将workerboy.php配置项输出到config目录下。php artisan workerboy:create MyApplication
新建一个Workerman3应用。- 编辑
Event.php
文件。编写业务逻辑。 - 在
config/workerboy.php
的applications
数组里增加刚刚添加的Workerman3应用。 php artisan workerboy:start --deamon
启动所有Workerman3应用。
命令
workerboy:create ApplicationName
创建一个Workerman3应用,默认是Gateway/BusinessWorker模式。 workerboy:create ApplicationName --worker-only
使用纯Worker模式创建一个Workerman3应用。
workerboy:start
启动Workerman3所有的应用。默认是调试模式。 workerboy:start --deamon
以守护进程方式启动。
workerboy:stop
停止系统。
workerboy:stop
重启系统。
workerboy:reload
平滑重启。
workerboy:status
查看状态。
具体请看: http://doc3.workerman.net/install/start-and-stop.html
凭证机制
开发者常见痛点:WebSocket连接上了,如何告诉Socket服务器当前连接的是Web服务器中的哪个用户呢?直接在连接时写上UserId?这太不安全了。Workerboy为了解决这个问题而产生了凭证机制,用于同步Web服务器用户ID和Socket服务器ClientId。
一共3步:
- 在WebSocket页面上输出一个凭证:
```javascript
<script>
var WORKERBOY_CREDENTIAL = <?php echo json_encode(\zgldh\workerboy\WorkerBoy::getInstance()->outputCredential()); ?>;
</script>
```
- 在WebSocket连接时将凭证传过去:
```javascript
var ws = new WebSocket('ws://' + window.location.host + ':8685');
ws.onopen = function () {
ws.send(JSON.stringify({
type : "login",
workerboy_credential: WORKERBOY_CREDENTIAL
}));
};
```
- 在Event.php中验证凭证:
```php
$workerBoy = WorkerBoy::getInstance();
$credential = @$message_data['workerboy_credential'];
$userId = $workerBoy->validateCredential($credential);
```
这样你就拿到了当前Socket连接用户在Web服务器里的UserId了。
凭证机制默认使用Laravel的Session进行存储,你可以修改config/workerboy.php
的credential_processor
项来自定义凭证机制。