laravel - 为什么我们需要像Pusher、Socket.io这样的产品来建立websocket连接?

标签 laravel websocket socket.io vue.js pusher

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

最佳答案

不需要

这些软件恰好使使用 Websocket 协议(protocol)变得简单。

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

基本上,为了能够使用 Websockets,您需要两个组件:

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

Laravel 不使用 Websockets 直接与前端通信的原因是 Laravel 本身不是 Websocket 服务器。至少,不是真的。虽然 PHP 确实支持使用 Websocket 协议(protocol) - 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,可以使用一个名为 Laravel Echo Server 的库专门为 Laravel 运行您自己的 Websocket 服务器。 .

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

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

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

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

关于laravel - 为什么我们需要像Pusher、Socket.io这样的产品来建立websocket连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44611103/

相关文章:

php - 授权.net API 错误 : Class 'Goetas\Xsd\XsdToPhp\Jms\Handler\BaseTypesHandler' not found

linux - 通过composer安装laravel 5.1 SSL3证书错误

php - Ratchet:如何通过 PHP 连接到它?

javascript - Socket.IO SSL 连接错误不使用express

javascript - 套接字IO : Forcing flash sockets, "No transport available"

php - 将具有 GMT 的字符串转换为 DateTime 格式 - php

javascript - 无限滚动显示重复结果

javascript - 在类外部调用函数与在类内部调用函数有什么区别?

node.js - 通过来自浏览器的 HTTPS 通过 Web 套接字连接 mqtt 客户端

ssl - websocket - 连接建立错误:net::ERR_INSECURE_RESPONSE