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 以前只是自己稍微研究过一点 有点手生 请大佬们指教一下

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《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年前 评论