对 Web 套接字的原生 PHP 支持是否可用?

IT技术 php javascript websocket
2021-02-04 12:42:50

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

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

我想使用这里在caniuse.com显示的 Web 套接字,它现在已在所有新的主要浏览器中实现。

谷歌搜索出现了这个Nets.TutsPlus 站点,我可以在其中使用 JavaScript 示例代码……但我需要知道如何在 PHP 中实现服务器端,而不是示例中的 Java、Ruby 或 Node.js。

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

实际上,该教程有一个指向 phpwebsockets 的断开链接……这是应该使用的库吗?

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

2个回答

就存在本机可用的标准 PHP WebSocket 对象而言,没有本机支持。

你需要使用一个库。

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

看:

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

另见:Ajax推送系统

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

是的,可以非常简单地执行 PHP + Websocket,无需任何第三方库(例如 Ratchet,经常被提及)。

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

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

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

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