为什么我们需要像 Pusher 和 Socket.io 这样的产品来建立 websocket 连接?
Why do we need products like Pusher and Socket.io to establish a websocket connection?
我最近在研究我的 Laravel 聊天练习应用程序时,一直在阅读有关 websockets 和 SaaS 的信息,例如 Pusher 和 Socket.io。我不明白的是,为什么我们需要外部软件来建立websocket连接?像Laravel这样的服务端代码不能像Vue.js那样直接和前端建立连接吗?为什么一定要经过Pusher和Socket.io这样的中间人?抱歉这个菜鸟问题。
没有。
这些软件恰好使使用 Websocket 协议变得简单。
请记住,Laravel 是一个固执己见 的框架。这意味着它将挑选自己的库来为您抽象出这些类型的概念,这样您就不必太担心幕后发生的事情。
基本上,您需要两个组件才能使用 Websockets:
- Websocket 服务器
- 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 to listen to events that occur through Redis and the Predis library。它这样做的原因是因为 Laravel 更适合作为 websocket 服务器和所有连接的客户端的中间人。
这样,Laravel既可以使用Broadcasting Events将信息向上传递到Websocket服务器,也可以从Websocket服务器接收事件信息,判断用户是否有能力或权限接收它们。
如果您不想使用 Pusher,有一个库可以让您 运行 自己的 Websocket 服务器,专门用于 Laravel,名为 Laravel Echo Server。
在幕后,这个库仍然使用 Socket.io 和 Redis,以便所有移动部件在 Laravel 网络应用程序中相互无缝通信。这样做的好处是您无需担心服务器发送的消息数量。
缺点是你现在必须知道如何在你的服务器上管理和维护这个进程,这样 Websocket 服务器就会知道在你每次重新启动你的服务器时打开,或者如果发生故障等。
查看 PM2 以了解有关 运行 安装和维护服务器守护进程的更多信息。
如果您不同意Laravel关于如何处理Websockets 的意见,那么理论上您可以使用任何其他服务器端语言来处理websocket 协议。它只需要对协议本身有更多的工作知识;如果 Laravel 需要使用它,您必须知道如何编写适当的服务和提供程序 类 才能处理它。
简答?您不必使用它们。努力编写自己的服务器和客户端 websocket 实现。
更长的答案。
为什么要使用Laravel?我可以直接 PHP.
完成所有这些
为什么要使用 Vue?我可以用 vanilla javascript.
做所有这些
我们使用库和框架是因为它们抽象了实现的细节并使构建产品更容易。他们处理你没有想到的边缘情况或事情 你甚至不知道你不知道 因为他们被成千上万的开发人员使用,所有的知识和他们遇到并修复的错误已融入实施中。
这是软件工程的标志之一,代码重用。不要重复自己,也不要编写任何不需要的软件。它使您可以专注于为您的特定需求构建解决方案,而不是在构建解决方案之前专注于构建一堆基础设施。
我从来没有用过Pusher,但是看起来,是的,它是一个SaaS 产品。但是 Socket.io is open source.
我最近在研究我的 Laravel 聊天练习应用程序时,一直在阅读有关 websockets 和 SaaS 的信息,例如 Pusher 和 Socket.io。我不明白的是,为什么我们需要外部软件来建立websocket连接?像Laravel这样的服务端代码不能像Vue.js那样直接和前端建立连接吗?为什么一定要经过Pusher和Socket.io这样的中间人?抱歉这个菜鸟问题。
没有。
这些软件恰好使使用 Websocket 协议变得简单。
请记住,Laravel 是一个固执己见 的框架。这意味着它将挑选自己的库来为您抽象出这些类型的概念,这样您就不必太担心幕后发生的事情。
基本上,您需要两个组件才能使用 Websockets:
- Websocket 服务器
- 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 to listen to events that occur through Redis and the Predis library。它这样做的原因是因为 Laravel 更适合作为 websocket 服务器和所有连接的客户端的中间人。
这样,Laravel既可以使用Broadcasting Events将信息向上传递到Websocket服务器,也可以从Websocket服务器接收事件信息,判断用户是否有能力或权限接收它们。
如果您不想使用 Pusher,有一个库可以让您 运行 自己的 Websocket 服务器,专门用于 Laravel,名为 Laravel Echo Server。
在幕后,这个库仍然使用 Socket.io 和 Redis,以便所有移动部件在 Laravel 网络应用程序中相互无缝通信。这样做的好处是您无需担心服务器发送的消息数量。
缺点是你现在必须知道如何在你的服务器上管理和维护这个进程,这样 Websocket 服务器就会知道在你每次重新启动你的服务器时打开,或者如果发生故障等。
查看 PM2 以了解有关 运行 安装和维护服务器守护进程的更多信息。
如果您不同意Laravel关于如何处理Websockets 的意见,那么理论上您可以使用任何其他服务器端语言来处理websocket 协议。它只需要对协议本身有更多的工作知识;如果 Laravel 需要使用它,您必须知道如何编写适当的服务和提供程序 类 才能处理它。
简答?您不必使用它们。努力编写自己的服务器和客户端 websocket 实现。
更长的答案。
为什么要使用Laravel?我可以直接 PHP.
完成所有这些为什么要使用 Vue?我可以用 vanilla javascript.
做所有这些我们使用库和框架是因为它们抽象了实现的细节并使构建产品更容易。他们处理你没有想到的边缘情况或事情 你甚至不知道你不知道 因为他们被成千上万的开发人员使用,所有的知识和他们遇到并修复的错误已融入实施中。
这是软件工程的标志之一,代码重用。不要重复自己,也不要编写任何不需要的软件。它使您可以专注于为您的特定需求构建解决方案,而不是在构建解决方案之前专注于构建一堆基础设施。
我从来没有用过Pusher,但是看起来,是的,它是一个SaaS 产品。但是 Socket.io is open source.