作者:mobiledu2502882247 | 来源:互联网 | 2023-01-31 21:54
我最近在浏览我的Laravel聊天练习应用程序时,一直在阅读像Pusher和Socket.io这样的websockets和SaaS.我不明白的是,为什么我们需要外部软件来建立websocket连接?像Laravel这样的服务器代码不能像Vue.js那样直接建立与前端的连接吗?为什么要像Pusher和Socket.io那样经历中间人?抱歉,这个菜鸟问题.
1> maiorano84..:
它不具备对.
这些软件碰巧使得使用Websocket协议变得微不足道.
请记住,Laravel是一个自以为是的框架.这意味着它将挑选和选择自己的库来为您抽象出这些类型的概念,这样您就不必太担心引擎盖下发生的事情了.
基本上,为了能够使用Websockets,您需要两个组件:
Websocket服务器
Websocket客户端
Laravel不使用Websockets直接与前端通信的原因是因为Laravel本身不是Websocket服务器.至少,不是真的.虽然PHP确实支持使用Websocket协议 - 甚至一些库可以更好地利用它 - 但它并不像其他语言那样经常用于处理长期存在的进程.
相反,Laravel使用Redis提供的Pub/Sub功能来侦听通过Redis和Predis库发生的事件.这样做的原因是因为Laravel更适合作为websocket服务器和所有连接客户端的中间人.
通过这种方式,Laravel既可以使用广播事件将信息传递到Websocket服务器,也可以从Websocket服务器接收事件信息,并确定用户是否具有接收它们的能力或授权.
如果您不想使用Pusher,那么有一个库可以让您专门为Laravel运行自己的Websocket服务器,称为Laravel Echo Server.
在引擎盖下,该库仍然使用Socket.io和Redis,以便所有移动部件在Laravel Web应用程序中无缝地相互通信.这样做的好处是您不必担心服务器发送的消息数量.
缺点是您现在必须知道如何在服务器上管理和维护此过程,以便Websocket服务器知道每次重新启动服务器时都会打开,或者如果发生故障等等.
查看PM2以了解有关运行和维护服务器守护程序的更多信息.
如果您不同意Laravel关于如何处理Websockets的意见,那么理论上您可以使用任何其他服务器端语言来处理websocket协议.它只需要更多的协议本身的工作知识; 如果Laravel需要使用它,您将必须知道如何编写适当的Service和Provider类以便能够处理它.
2> Bert..:
简短的回答?您不必使用它们.自己编写自己的服务器和客户端websocket实现.
更长的答案.
为什么要使用Laravel?我可以用直接的PHP做到这一切.
为什么要使用Vue?我可以用vanilla Javascript完成所有这些.
我们使用库和框架,因为它们抽象出实现的细节并使构建产品更容易.它们可以处理您不想到的边缘情况或者您甚至不知道您不知道的情况,因为它们被成千上万的开发人员使用,并且他们遇到和修复的所有知识和错误都被烘焙到了实现.
这是软件工程,代码重用的标志之一.不要重复自己,不要写任何你不需要的软件.它允许您专注于为您的特定需求构建解决方案,而不是在构建解决方案之前专注于构建一堆基础架构.
我从未使用过Pusher,但看起来,是的,它是SaaS产品.但是Socket.io是开源的.