php - 使用推送器将所有消息保存在我的服务器上

标签 php laravel chat real-time pusher

我正在开发一个聊天功能,目前可以处理连续的服务器请求,这会导致资源浪费。

所以我想利用 pusher 提供的服务平台。问题是我需要将客户端交换的每条消息保存在我的数据库中。据我所知,推送器仅使用服务器端进行 channel 认证和向客户端转发消息,而客户端之间的通信不通过我的服务器。

我可能已经在 this thread 中找到了问题的答案(月光 react )

除了我不知道如何实现类似的东西......一些帮助?

最佳答案

您可以通过以下两种方式之一触发聊天消息事件:

  1. 客户端 -> 你的服务器 -> Pusher HTTP API -> 所有客户端
  2. 客户端 -> Pusher WebSocket API -> 所有客户端

在场景 1 中,消息通过您自己的服务器传输,因此您可以轻松地将它们存储在数据库中。

在方案 2 中,您可以设置 client event WebHooks .使用这些消息路由是:

客户端 -> Pusher WebSocket API -> 所有客户端 && WebHook -> 你的服务器

然后,当客户端事件消息通过 WebHook 到达时,您可以将它们存储在数据库中。

如何设置 Pusher WebHook

您在仪表板中为您的 Pusher 应用程序设置了一个 WebHook。

只需为应用选择 WebHooks 设置。

WebHook setting

使用您自己的应用程序上的端点作为 URL 创建一个新的“客户端事件”WebHook:

Create a Pusher WebHook

WebHook 将被创建,因此只要为此应用程序触发客户端事件,该端点就会被触发。

WebHook created

使用 Pusher WebHook

对您定义的 URL 的 POST 请求的格式为:

{
  "name": "client_event",
  "channel": "name of the channel the event was published on",
  "event": "name of the event",
  "data": "data associated with the event",
  "socket_id": "socket_id of the sending socket",
  "user_id": "user_id associated with the sending socket" # Only for presence channels
}

因此,您需要解析请求的主体并获取您需要的信息。

请务必阅读 WebHook docs并遵循安全准则。

关于php - 使用推送器将所有消息保存在我的服务器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29120347/

相关文章:

php - 如何在php中选择mysql中的特定语句?

php - 从数组中删除 stdClass 对象

php - Laravel Eloquent ORM 关系命名约定

c# - 为这个聊天应用程序使用 Ajax(可能与 Web 服务一起使用)

ios - 无法使用 Stream Chat iOS SDK 构建项目

go - 将 os.Stdin 转换为 []byte

php - 无法修改config.inc.php

php - Codeigniter 电子邮件错误处理

javascript - vueJS mixin 在 laravel 5.7 中多次触发

Laravel API 响应对象格式化