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

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5

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

4周前 评论
cccdz (楼主) 4周前

感觉 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 之类是怎么来的。

4周前 评论

感覺需要解决两个问题

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

file

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

4周前 评论

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