Skip to content

laravel-reverb 关键协议

Pusher Channels Protocol

完整事件列表总结

服务器 → 客户端:

  1. pusher:connection_established - 连接建立
  2. pusher_internal:subscription_succeeded - 订阅成功(内部)
  3. pusher:subscription_succeeded - 订阅成功(外部)
  4. pusher_internal:subscription_error - 订阅错误
  5. pusher:subscription_count - 订阅计数
  6. pusher:ping - ping 消息
  7. pusher:error - 错误信息
  8. pusher:signin_success - 用户认证
  9. pusher_internal:member_added - 成员加入(Presence)
  10. pusher_internal:member_removed - 成员移除(Presence)

客户端 → 服务器:

  1. pusher:subscribe - 订阅请求
  2. pusher:unsubscribe - 取消订阅
  3. pusher:signin - 用户认证
  4. pusher:pong - pong 响应
  5. 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"
}

Released under the MIT License.