Socket.IO 上的 PHP 应用程序 + 基于 WebSocket 的通知
Posted
技术标签:
【中文标题】Socket.IO 上的 PHP 应用程序 + 基于 WebSocket 的通知【英文标题】:PHP application + WebSocket based notifications over Socket.IO 【发布时间】:2012-08-26 08:33:42 【问题描述】:我有一个使用 laravel 用 php 编写的 Web 应用程序。
现在,我必须添加实时通知系统,从服务器 -> 客户端推送消息,并且可以检索从客户端 -> 服务器推送的消息。
由于 Socket.IO 向后兼容并且可以优雅地降级,我想将它用于 WebSocket / AJAX 轮询部分。
问题是 Socket.IO 默认与 Node.JS 后端一起工作。
我对服务器具有 root 访问权限,并行运行(Apache 和 Node)或添加任何额外内容都没有问题。
问题是,如何从 PHP 向 Node + Sockets.IO 发送消息?
然后,如何将消息从 Sockets.IO + Node 传输到 PHP?
我已将 Node + Sockets to Browser 部分排除在外,因为这很简单。
我已经看到使用Express.js + CURL and/or POST requests 的示例,但是,没有更低级别的方法吗?
我知道DNode + PHP,但我无法想象如何组装所有东西 - Apache、PHP、Node、Socket.IO、DNode,这样它们才能无缝地协同工作。
另外,我已经将这个 PHP WebSockets server 实现转换为 laravel 库。然而,这个库的问题在于它在客户端使用了干净的 WebSockets。而且,我找不到与Socket.IO client 一起破解它的方法。
【问题讨论】:
【参考方案1】:using PHP and Socket.IO 上的本教程回答了您问题的主要部分。
socket.io 不是您唯一的选择。看看realtime web tech guide。从外观上看,目前最好的基于 PHP 的解决方案是 Ratchet。这需要作为一个单独的进程运行,因此您仍然会遇到跨进程通信问题。
常见的跨进程通信问题是使用消息队列。当您希望在 Apache 上运行的 PHP 应用程序能够获知来自实时 Web 技术的事件时,问题就出现了。您可能必须通过网络调用来完成此操作,即使它是从实时网络技术进程到 apache 服务器的调用。
另一种选择是将实时通信卸载到托管服务,例如我工作的Pusher。
这个最近的问题也很相关,并且有一些有用的链接:Is native PHP support for Web Sockets available?
【讨论】:
该死的,那个棘轮!它拥有! socketo.me/docs/push 有关于如何从非棘轮应用程序推送的分步教程。我在几分钟内实现了该功能。棘轮+10。 @leggetter 哇,对我来说,Pusher 看起来真的很简单。谢谢你分享这个。我想我会试一试。这更好,然后浪费我的时间来实现我自己的系统。 是的,Pusher.com 似乎是明智的选择! 这并没有解决问题的主要要求:USING Socket.IO @Hellen 我添加了一篇文章的链接,该文章直接回答了如何集成 Socket.IO 和 PHP。【参考方案2】:Elephant.IO 支持 PHP 和 Socket.IO 看看吧!
【讨论】:
【参考方案3】:在 node 和 apache/php 之间没有一种简单的通信方式。因此,您要么必须在节点中再次编写所有功能(连接到 mysql 数据库等),要么创建一个 API 以从节点调用并传递给套接字。
但是,您可以使用像 Jquery graceful websockets 和 this php class 这样的 jquery 插件来通过 jquery 和 php 获得自己的 websockets 功能,而不是使用 sockets.io。
【讨论】:
以上是关于Socket.IO 上的 PHP 应用程序 + 基于 WebSocket 的通知的主要内容,如果未能解决你的问题,请参考以下文章
带有 socket.io 和后端 php 的 Angular