【问题标题】:Why do we need products like Pusher and Socket.io to establish a websocket connection?为什么我们需要像 Pusher 和 Socket.io 这样的产品来建立 websocket 连接?
【发布时间】:2017-06-18 02:04:42
【问题描述】:

我最近一直在阅读有关 websockets 和 SaaS (如 Pusher 和 Socket.io)的信息,同时正在开发我的 Laravel 聊天练习应用程序。我不明白的是,为什么我们需要外部软件来建立 websocket 连接?像 Laravel 这样的服务端代码不能直接和 Vue.js 这样的前端建立连接吗?为什么一定要经过 Pusher 和 Socket.io 这样的中间人?抱歉这个菜鸟问题。

【问题讨论】:

  • 有关 socket.io 为您提供的 webSocket 不具备的一些特性的列表,请参见:Moving from socket.io to raw websockets?。其中许多 socket.io 功能非常有用,如果仅使用 webSocket(例如自动重新连接),则需要自己编写。

标签: laravel websocket socket.io vue.js pusher


【解决方案1】:

它没有

这些软件恰好使使用 Websocket 协议变得微不足道。

请记住,Laravel 是一个自以为是的框架。这意味着它将选择自己的库来为您抽象出这些类型的概念,这样您就不必太担心幕后发生的事情。

基本上,您需要两个组件才能使用 Websocket:

  1. Websocket 服务器
  2. Websocket 客户端

Laravel 不使用 Websockets 直接与前端通信的原因是 Laravel 本身不是 Websocket 服务器。至少,不是真的。虽然 PHP 确实支持使用 Websocket 协议 - and even some libraries to leverage it a little more nicely - 但它不像其他语言那样经常用于处理长期存在的进程。

相反,Laravel 使用 Pub/Sub functionality that Redis provides 来监听通过 Redis 和 Predis library 发生的事件。这样做的原因是因为 Laravel 更适合作为 websocket 服务器和所有连接客户端的中间人。

这样,Laravel 既可以使用Broadcasting Events 将信息向上传递到 Websocket 服务器,也可以从 Websocket 服务器接收事件信息并确定用户是否有能力或授权接收它们。

如果你不想使用 Pusher,有一个库可以让你运行自己的 Websocket 服务器,专门用于 Laravel,名为 Laravel Echo Server

在底层,这个库仍然使用 Socket.io 和 Redis,以便所有移动部件在 Laravel Web 应用程序中无缝地相互通信。这样做的好处是您无需担心服务器发送的消息数量。

缺点是你现在必须知道如何在你的服务器上管理和维护这个过程,以便 Websocket 服务器知道每次你重启服务器时打开,或者如果发生故障等。

查看PM2,了解有关运行和维护服务器守护程序的更多信息。

如果你不同意 Laravel 关于如何处理 Websockets 的观点,那么理论上你可以使用任何其他服务器端语言来处理 websocket 协议。它只需要对协议本身有更多的工作知识;如果 Laravel 需要使用它,你必须知道如何编写适当的 Service 和 Provider 类来处理它。

【讨论】:

    【解决方案2】:

    简短回答?您不必使用它们。自己编写自己的服务器和客户端 websocket 实现。

    更长的答案。

    为什么要使用 Laravel?我可以直接使用 PHP 完成所有这些工作。

    为什么要使用 Vue?我可以用 vanilla javascript 完成所有这些工作。

    我们使用库和框架是因为它们抽象了实现的细节并使构建产品变得更加容易。他们处理您没有想到的边缘情况或您甚至不知道自己不知道的事情,因为成千上万的开发人员以及他们拥有的所有知识和错误都在使用它们遇到的和已修复的都被纳入实施。

    这是软件工程的标志之一,代码重用。不要重复自己,不要编写任何你不需要的软件。它使您可以专注于为您的特定需求构建解决方案,而不是在构建解决方案之前专注于构建一堆基础架构。

    我从未使用过 Pusher,但它看起来是的,它是一个 SaaS 产品。但是Socket.io is open source

    【讨论】:

      猜你喜欢
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 2012-01-03
      • 2021-05-29
      • 2020-11-21
      相关资源
      最近更新 更多