{"id":18345800,"url":"https://github.com/hyperf/mqtt-server-incubator","last_synced_at":"2025-04-06T08:32:08.069Z","repository":{"id":56987734,"uuid":"358521919","full_name":"hyperf/mqtt-server-incubator","owner":"hyperf","description":null,"archived":false,"fork":false,"pushed_at":"2023-11-06T06:09:23.000Z","size":65,"stargazers_count":18,"open_issues_count":0,"forks_count":5,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-09-24T21:55:33.292Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hyperf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2021-04-16T08:00:57.000Z","updated_at":"2024-05-25T09:13:47.000Z","dependencies_parsed_at":"2023-11-06T07:25:58.590Z","dependency_job_id":"d96694c8-3aed-42c7-b31d-8d6cf05d2d24","html_url":"https://github.com/hyperf/mqtt-server-incubator","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperf%2Fmqtt-server-incubator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperf%2Fmqtt-server-incubator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperf%2Fmqtt-server-incubator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperf%2Fmqtt-server-incubator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hyperf","download_url":"https://codeload.github.com/hyperf/mqtt-server-incubator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223245061,"owners_count":17112572,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-05T21:09:32.180Z","updated_at":"2024-11-05T21:09:32.931Z","avatar_url":"https://github.com/hyperf.png","language":"PHP","readme":"# MQTT Server\n\n## 安装\n\n```bash\ncomposer require hyperf/mqtt-server-incubator\n```\n\n## 配置服务\n\n```php\n\u003c?php\n\ndeclare(strict_types=1);\n/**\n * This file is part of Hyperf.\n *\n * @link     https://www.hyperf.io\n * @document https://hyperf.wiki\n * @contact  group@hyperf.io\n * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE\n */\nuse Hyperf\\Server\\Event;\nuse Hyperf\\Server\\Server;\n\nreturn [\n    'mode' =\u003e SWOOLE_BASE,\n    'servers' =\u003e [\n        [\n            'name' =\u003e 'mqtt',\n            'type' =\u003e Server::SERVER_BASE,\n            'host' =\u003e '0.0.0.0',\n            'port' =\u003e 1883,\n            'sock_type' =\u003e SWOOLE_SOCK_TCP,\n            'callbacks' =\u003e [\n                Event::ON_RECEIVE =\u003e [Hyperf\\MqttServer\\MQTTServer::class, 'onReceive'],\n            ],\n        ],\n    ],\n    'settings' =\u003e [\n        'enable_coroutine' =\u003e true,\n        'worker_num' =\u003e 4,\n        'pid_file' =\u003e BASE_PATH . '/runtime/hyperf.pid',\n        'open_tcp_nodelay' =\u003e true,\n        'max_coroutine' =\u003e 100000,\n        'open_http2_protocol' =\u003e true,\n        'max_request' =\u003e 0,\n        'socket_buffer_size' =\u003e 2 * 1024 * 1024,\n        'package_max_length' =\u003e 2 * 1024 * 1024,\n    ],\n    'callbacks' =\u003e [\n        Event::ON_BEFORE_START =\u003e [Hyperf\\Framework\\Bootstrap\\ServerStartCallback::class, 'beforeStart'],\n        Event::ON_WORKER_START =\u003e [Hyperf\\Framework\\Bootstrap\\WorkerStartCallback::class, 'onWorkerStart'],\n        Event::ON_PIPE_MESSAGE =\u003e [Hyperf\\Framework\\Bootstrap\\PipeMessageCallback::class, 'onPipeMessage'],\n        Event::ON_WORKER_EXIT =\u003e [Hyperf\\Framework\\Bootstrap\\WorkerExitCallback::class, 'onWorkerExit'],\n    ],\n];\n\n```\n\n启动服务，我们就可以简单的使用 MQTT 服务了。\n\n## 自定义事件\n\n组件增加了可以监听 MQTT 服务各个阶段的事件，比如我们写一个 `MQTTConnectHandler` 用来监听客户端连接。\n\n\u003e PUBLISH, SUBSCRIBE 和 UNSUBSCRIBE 三个事件，需要自行实现\n\n```php\n\u003c?php\n\ndeclare(strict_types=1);\n\nnamespace App\\MQTT\\Event;\n\nuse Hyperf\\HttpMessage\\Server\\Response;\nuse Hyperf\\MqttServer\\Annotation\\MQTTConnect;\nuse Hyperf\\MqttServer\\Handler\\HandlerInterface;\nuse Psr\\Http\\Message\\ServerRequestInterface;\n\n#[MQTTConnect(priority: 1)]\nclass MQTTConnectHandler implements HandlerInterface\n{\n    public function handle(ServerRequestInterface $request, Response $response): Response\n    {\n        var_dump((string) $request-\u003egetBody());\n        return $response;\n    }\n}\n```\n\n重启服务，连接 MQTT 时，便可以得到以下输出。\n\n```\n$ php bin/hyperf.php start\n[INFO] TCP Server listening at 0.0.0.0:1883\nstring(234) \"{\"type\":1,\"protocol_name\":\"MQTT\",\"protocol_level\":4,\"clean_session\":1,\"will\":{\"qos\":0,\"retain\":0,\"topic\":\"simps-mqtt\\/user001\\/delete\",\"message\":\"byebye\"},\"user_name\":\"\",\"password\":\"\",\"keep_alive\":10,\"client_id\":\"Simps_60e5aa0c4284f\"}\"\n```\n\n组件支持的事件列表如下：\n\n|      事件       |         备注         |\n| :-------------: | :------------------: |\n|   MQTTConnect   |   客户端连接时触发   |\n| MQTTDisconnect  | 客户端断开连接时触发 |\n|   MQTTPingReq   |                      |\n|   MQTTPublish   | 客户端发布消息时触发 |\n|  MQTTSubscribe  |   客户端订阅时触发   |\n| MQTTUnsubscribe | 客户端取消订阅时触发 |\n\n注解支持参数如下\n\n|   参数   |                      备注                      |\n| :------: | :--------------------------------------------: |\n|  server  |            指定当前事件对应的服务名            |\n|   type   |                    事件类型                    |\n| priority | 事件优先级，越大越先执行，默认的事件优先级为 0 |\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyperf%2Fmqtt-server-incubator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhyperf%2Fmqtt-server-incubator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyperf%2Fmqtt-server-incubator/lists"}