是否提供对 Web Sockets 的原生 PHP 支持?

Posted

技术标签:

【中文标题】是否提供对 Web Sockets 的原生 PHP 支持?【英文标题】:Is native PHP support for Web Sockets available? 【发布时间】:2012-08-25 13:39:27 【问题描述】:

寻找 Web Sockets 实现的 Hello World 类型示例:

这是来自 php.net 的 Socket Create 参考,但这看起来比 Web Sockets 低级。

我想在caniuse.com 上使用这个 Web Sockets,它现在在所有新的主要浏览器中都实现了。

Google 搜索出现了这个Nets.TutsPlus site,我可以在其中使用 javascript 示例代码...但我需要知道如何在 PHP 中实现服务器端,而不是 Java、Ruby 或 Node.js,就像在例子。

PHP Socket Create 是否相关? PHP 本身是否支持 Web Sockets?我想只是在 PHP 实现的正确方向上的一点会有所帮助。

实际上本教程的 phpwebsockets 链接已断开...这是应该使用的库吗?

Websockets.org 有一个测试应用程序,但没有提到 PHP。

【问题讨论】:

这可能会有所帮助:PHP Socket Programming, done the Right Way 谷歌搜索“PHP Websockets”会给你很多结果,例如:socketo.me、flynsarmy.com/2012/02/php-websocket-chat-application-2-0、code.google.com/p/phpwebsocket 我没有看到关于如何在 PHP 中处理 Web 套接字的明确方向......它是原生支持的还是我需要另一个库......这将是我关于如何实现的第一个问题?.... 在您的搜索中,不要将套接字与网络套接字混淆。 很好的问题。这就是我想问的。 【参考方案1】:

在原生可用的标准 PHP WebSocket 对象方面没有原生支持。

您需要使用库。

接下来要考虑的是 WebSocket 服务器如何运行。通常 PHP 在 Apache、nginx(通过 FastCGI)或 Microsoft IIS(通过 Fast CGI)上运行。对于 Apache 和 IIS,这可能是个问题,因为它并没有真正考虑 WebSockets 等持久连接。我不确定Nginx。这就是为什么大多数 PHP WebSocket 库将构建为独立库以作为它们自己的进程运行的原因。

见:

Apache 模块:https://github.com/disconnect/apache-websocket 棘轮:https://github.com/cboden/Ratchet 扳手:https://github.com/varspool/Wrench PHP WebSocket:http://code.google.com/p/phpwebsocket/

注意:IE10 现已在 Windows 8 中发布

另见:Ajax push system

【讨论】:

主机提供商是否支持这一点?小的...像godaddy.com,wiredtree.com,我基本上只是选择一个库,然后将它放到我的网络文件夹中...事情是我在LAMP堆栈上... 对此的一般回答是,托管服务提供商不喜欢你创建持久连接——而且绝对不会有 100 或 1000 的持久连接。就我个人而言,我认为在很长一段时间内,共享主机上的自托管 WebSocket 使用不会成为一种选择。恕我直言,它当然不能很好地与标准 LAMP 堆栈集成。目前,我认为像 Pusher(我为之工作的)这样的托管服务是共享托管 LAMP 堆栈上开发人员的最佳解决方案。 我咨询了 Wired Tree 的技术支持,他们说没问题。 @leggetter 你能提供一个关于持久连接仇恨的链接吗?当我切换到 100% ajax 时,我的带宽使用量急剧下降。在使用 100% websocket 后,它以大致相同的速度下降。所以我很好奇。提前致谢! @Gracchus - Leggetter 所说的几乎是常识。向外界开放套接字会带来许多问题,尤其是当服务通常由新手编码时。你有进程管理问题、连接管理问题、安全问题(每个打开的端口基本上都是进入系统的一扇门)等等。此外,如果服务没有损坏,没有充满安全问题,并且运行高效,它基本上成为提供商的竞争服务。没有多少商业模式对这种事情持开放态度。【参考方案2】:

是的,可以非常简单地使用 PHP + Websocket,无需任何第三方库(如 Ratchet,经常提到)。

article 是一个很好的轻量级示例。 (我在复杂的解决方案上浪费了几个小时,所有这些解决方案都包括几个库,直到我发现这篇有用、简单的文章)

您可以在此处找到更多详细说明:How to create websockets server in PHP。

它使用一个持续运行的 PHP 服务器,您可以从带有php websockets.php 的命令行开始,并带有一个事件循环(类似于 Node.JS 的方式)。可以 100% 使用原生 PHP 函数,如 socket_create 等。

【讨论】:

这正是我想要的!谢谢你亲爱的。我对底层编程中的工作方式非常感兴趣。 这是一个不错的项目。如果您使用的是不安全的 http 页面,则无法启动它或调用套接字。所以这个例子只适用于不安全的连接(不适用于 https)

以上是关于是否提供对 Web Sockets 的原生 PHP 支持?的主要内容,如果未能解决你的问题,请参考以下文章

Linux 中的 web_sockets 等价物在哪里?

Webpack Dev Server在HTTPS / Web Sockets Secure上运行

LoadRunner web_set_sockets_option()--常用函数

django Web-Sockets 设计和内存数据存储

编译安装 PHP 扩展

PHP Sockets - 接受多个连接