Laravel Reverb 目前在不和广播系统联动的情况下使用吗 就像gateway worker那样使用

如题

我看源码包启动里面有一个onData 但是对于同一个连接不会往下执行代码了

Laravel Reverb  目前在不和广播系统联动的情况下使用吗 就像gateway worker那样使用

Laravel Reverb  目前在不和广播系统联动的情况下使用吗 就像gateway worker那样使用

是需要在第一次连接的时候通过匹配到路由在控制器里面做一个onMessage的绑定吗

Laravel Reverb  目前在不和广播系统联动的情况下使用吗 就像gateway worker那样使用

Laravel Reverb  目前在不和广播系统联动的情况下使用吗 就像gateway worker那样使用
这个可以在控制器里面去处理wsconnection 然后给connection绑定一个onmessage监听 但是我不清楚这样做是否合理

第一次实际在项目中需要使用socket 以前只是自己稍微研究过一点 有点手生 请大佬们指教一下

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 5

感觉符合你的说法,Http/Server 类只是负责初始化连接,连接成功之后,服务器和客户端之间就可以在 Socket 管道上沟通了,这时再让更内部的代码,如 Pusher/Server,来接手。

1个月前 评论
cccdz (楼主) 1个月前

感觉 Laravel Reverb 是业务无关的,跑一个 Reverb Server 就能带动任意多个 Laravel app,代码也不用放在一个 repo 中,就像一个 MySQL 服务,能容纳任意个 Laravel app 一样。

广播事件时,Laravel 会从 Queue 首先建立 WebSocket 连接,然后发送事件,如:

$  websocat 'ws://0.0.0.0:8080/app/qnpmtki2oq1fg3bh5wls?protocol=7&client=js&version=8.4.0-rc2&flash=false'
{"event":"pusher:connection_established","data":"{\"socket_id\":\"660301292.204220128\",\"activity_timeout\":30}"}
$ socat -v TCP-LISTEN:4444,fork TCP:localhost:8080
POST /apps/180223/events?auth_key=qnpmtki2oq1fg3bh5wls&auth_timestamp=1711208007&auth_version=1.0&body_md5=eff2b6b00035c103c43262dd8ffb62cb&auth_signature=944bd756deaa60d807a13f080324e4dde6fbbf5dda4adfdc4ca8a033e8f0aa9a HTTP/1.1\r
Host: 127.0.0.1:4444\r
User-Agent: GuzzleHttp/7\r
Content-Type: application/json\r
X-Pusher-Library: pusher-http-php 7.2.4\r
Content-Length: 204\r
\r
{"name":"App\\\\Events\\\\MessageCreated","data":"{\\"message\\":{\\"id\\":1,\\"content\\":\\"a\\",\\"created_at\\":\\"2024-03-23T01:49:22.000000Z\\",\\"updated_at\\":\\"2024-03-23T01:49:22.000000Z\\"}}","channel":"message"}

如果不用 Laravel 自带的话,理论上肯定是可行的,只要符合 WebSocket 标准就行,但还得符合 Reverb 内部的规定,比如要自己搞清楚 auth_signature 之类是怎么来的。

1个月前 评论

感覺需要解决两个问题

  1. 保存clientId 对应的 connection(保存到服務器內存)
  2. 保存uid 对应的 clientId(保存到redis) 复杂均衡的话 第2点保存到redis(Hash key uid 值是一個json {"clientid" => "ip"}) 然后记录这个client对应的服务器ip地址 然后往对应的ip发送http协议的请求与WS通信 然后发送给对应的client
1个月前 评论

file

看到这个有点绝望了 :joy: 目前这个东西只能配合广播用

1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!