PHPackages                             dean/routeway-worker - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Queues &amp; Workers](/categories/queues)
4. /
5. dean/routeway-worker

ActiveLibrary[Queues &amp; Workers](/categories/queues)

dean/routeway-worker
====================

base on gateway worker

25PHPCI failing

Since Sep 30Pushed 4y agoCompare

[ Source](https://github.com/hdlovefork/gateway-worker)[ Packagist](https://packagist.org/packages/dean/routeway-worker)[ RSS](/packages/dean-routeway-worker/feed)WikiDiscussions master Synced 2d ago

READMEChangelogDependenciesVersions (1)Used By (0)

功能
==

[](#功能)

将Web中的中间件、路由、请求参数验证等概念集成到WorkerMan中，使得处理IM消息就像编写Web控制器一样简单

安装
==

[](#安装)

`composer require dean/routeway-worker`

发布配置文件

`php artisan vendor:public --tag routeway`

将生成路由配置文件`routes/routeway.php`和websocker配置文件`config/routeway.php`

开始
==

[](#开始)

启动Workerman

```
php artisan workerman start --d

```

停止Workerman

```
php artisan workerman stop --d

```

其中`--d`参数表示后台运行服务器，可以不添加

说明
==

[](#说明)

客户端和服务器通讯使用JSON格式传输数据，包含`type`和`data`2个字段：

```
{
	"type": "your message type string",
	"data": {
		...
	}
}
```

- type表示该数据包的类型，值为字符串类型，比如：`"login"`（登录）,`"chat"`(聊天)等，需要开发者自定义；
- data表示该数据包的主体内容，值为数组或对象；

闭包处理
----

[](#闭包处理)

假设服务器收到的消息内容如下：

```
{
	"type": "hi",
	"data": {}
}
```

使用闭包方式处理hi消息

routes/routeway.php

```
$router = app(Dean\RoutewayWorker\Routing\Router::class);

// 使用register方法注册hi消息的处理
$router->register('hi',function (SocketRequest $request)
{
   // 生成回复内容
   $res = make_response('hi',['message'=>'Hello World']);
 	// 回复客户端
   \GatewayWorker\Lib\Gateway::sendToCurrentClient($res);
});
```

服务器将发送以下内容至客户端：

```
{
	"type": "hi",
	"data": {
		"message": "Hello World"
	}
}
```

Handler处理
---------

[](#handler处理)

执行以下命令会在app\\Handlers\\目录下生成消息处理器LoginHandler

`php artisan make:handler LoginHandler`

然后在routes/routeway.php，添加如下内容：

```
$router = app(Dean\RoutewayWorker\Routing\Router::class);

// 使用register方法注册login消息的处理
$router->register('login', 'App\Handlers\LoginHandler');
```

使用中间件方式

```
$router = app(Dean\RoutewayWorker\Routing\Router::class);

$router->group([
	'middleware' => App\Socket\Middleware\AnyMiddleware::class
],function($router){
		$router->register('login', 'App\Handlers\LoginHandler');
});

// 或者
$router->register('login', 'App\Handlers\LoginHandler')->middleware(App\Socket\Middleware\AnyMiddleware::class)
```

假设服务器收到的login完整的消息内容如下：

```
{
	"type": "login",
	"data":
	{
		"username": "dean@example.com",
		"password": "123456"
	}
}
```

下面我们将读出username和password的值

app\\Handlers\\LoginHandler.php

```
namespace App\Handlers\LoginHandler;

use App\Requests\Socket\LoginRequest;
user App\User;

class LoginHandler
{
  // $user参数自动注入
	public function handler(LoginRequest $request,User $user)
	{
		$username = $request->username; // dean@example.com
		$password = $request->password; // 123456
    // 登录逻辑
    ...
	}
}
```

handler方法中的`User $user`参数将会自动注入，而`LoginRequest $request`用于验证消息体data内的参数格式是否正确

app\\Requests\\Socket\\LoginRequest.php

```
namespace App\Requests\Socket\LoginRequest;

use Dean\RoutewayWorker\Requests\SocketRequest;

public class LoginRequest extends SocketRequest
{

	public function rules()
	{
        return [
            'username' => 'required|email',
            'password' => 'required|min:6'
        ];
	}

	public function messages()
	{
        return [
            'username.required' => '用户名必填',
            'username.email' 	  => '电子邮箱格式不正确',
            ...
        ];
	}

	public function attributes()
	{
    	return [
            'username' => '用户名',
            'password' => '密码',
        ];
	}

}
```

helper方法
--------

[](#helper方法)

### 生成回复json字符串

[](#生成回复json字符串)

```
function make_response(string $type, $data = [], TransformerAbstract $transformer = null, $include = null)
```

- $type: 自定义消息类型，如“login"
- $data: 消息数据体，可以是一个数组或者Model
- $transformer: 如果$data为Model时模型转json的转换器，参照[这里](https://fractal.thephpleague.com/transformers/)
- $include: 当使用$data为Model时$transformer额外包含的关联数据,参照[这里](https://fractal.thephpleague.com/transformers/)

### 回复错误消息

[](#回复错误消息)

```
function response_error(int $client_id, string $msg, $code = 422)
```

- $client\_id：客户端id
- $msg: 错误消息内容
- $code: 错误代码

###  Health Score

16

—

LowBetter than 4% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity28

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/7336084?v=4)[hdlovefork](/maintainers/hdlovefork)[@hdlovefork](https://github.com/hdlovefork)

---

Top Contributors

[![hdlovefork](https://avatars.githubusercontent.com/u/7336084?v=4)](https://github.com/hdlovefork "hdlovefork (12 commits)")

### Embed Badge

![Health badge](/badges/dean-routeway-worker/health.svg)

```
[![Health](https://phpackages.com/badges/dean-routeway-worker/health.svg)](https://phpackages.com/packages/dean-routeway-worker)
```

###  Alternatives

[league/geotools

Geo-related tools PHP 7.3+ library

1.4k5.5M30](/packages/league-geotools)[illuminate/bus

The Illuminate Bus package.

6045.5M508](/packages/illuminate-bus)[uecode/qpush-bundle

Asynchronous processing for Symfony using Push Queues

1672.5M2](/packages/uecode-qpush-bundle)[jayazhao/think-queue-rabbitmq

为 ThinkPHP5.1 队列增加 RabbitMQ 驱动

141.5k](/packages/jayazhao-think-queue-rabbitmq)[mayconbordin/l5-stomp-queue

Stomp Queue Driver for Laravel 5

121.1k](/packages/mayconbordin-l5-stomp-queue)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
