laravel-reverb 关键协议
Pusher Channels Protocol
完整事件列表总结
服务器 → 客户端:
pusher:connection_established- 连接建立pusher_internal:subscription_succeeded- 订阅成功(内部)pusher:subscription_succeeded- 订阅成功(外部)pusher_internal:subscription_error- 订阅错误pusher:subscription_count- 订阅计数pusher:ping- ping 消息pusher:error- 错误信息pusher:signin_success- 用户认证pusher_internal:member_added- 成员加入(Presence)pusher_internal:member_removed- 成员移除(Presence)
客户端 → 服务器:
pusher:subscribe- 订阅请求pusher:unsubscribe- 取消订阅pusher:signin- 用户认证pusher:pong- pong 响应client_*(自定义客户端事件)
链接 reverb (websocket)
ws://localhost:8080/app/{key}?protocol=7&client=js&version=8.4.0-rc2&flash=false
json
{
"event": "pusher:connection_established",
"data": {
"socket_id": "428136897.322056381",
"activity_timeout": 30
}
}心跳检测
json
{
"event": "pusher:ping",
"data": {}
}json
{
"event": "pusher:pong"
}订阅
- 订阅公共频道
json
{
"event": "pusher:subscribe",
"data": {
"auth": "",
"channel": "system"
}
}json
{
"event": "pusher_internal:subscription_succeeded",
"data": "{}",
"channel": "system"
}鉴权 (GET | POST | HEAD)
http://localhost:8000/broadcasting/auth?socket_id={socket_id}&channel_name={channel_name}
php
# routes/channels.php
Broadcast::channel('chat.{id}', function ($user, $id) {
return $user->id == $id;
});
# 也可以指定其他鉴权方式
# Broadcast::channel('chat.{id}', ... , [ 'guards' => 'admin' ]);
# Broadcast::channel('chat.{id}', ... , [ 'guards' => ['web', 'admin'] ]);json
{
"auth": "auth-str",
"channel_data": {
"user_id": "1",
"user_info": {
"id": 1,
"name": "hutao"
}
}
}- 订阅私有频道
private-{channel_name}.{id}
json
{
"event": "pusher:subscribe",
"data": {
"auth": "auth-str",
"channel": "private-App.Models.User.1"
}
}json
{
"event": "pusher_internal:subscription_succeeded",
"data": "{}",
"channel": "private-App.Models.User.1"
}- 订阅持久化频道(聊天室、群组)
presence-{channel_name}.{id}
json
{
"event": "pusher:subscribe",
"data": {
"auth": "auth-str",
"channel_data": {
"user_id": "1",
"user_info": {
"id": 1,
"name": "hutao"
}
},
"channel": "presence-chat.123"
}
}json
{
"event": "pusher_internal:subscription_succeeded",
"data": {
"presence": {
"count": 2,
"ids": [ "2", "1" ],
"hash": {
"2": { "id": 2, "name": "seven" },
"1": { "id": 1, "name": "hutao" }
}
}
},
"channel": "presence-chat.123"
}json
{
"event": "pusher_internal:member_removed",
"data": {
"user_id": "2"
},
"channel": "presence-chat.123"
}json
{
"event": "pusher_internal:member_added",
"data": {
"user_id": "2"
},
"channel": "presence-chat.123"
}