问题描述

Websockets 是一款很酷的 cutting-edge 技术,被包装成 HTML5 。基本上,您可以打开一个 websocket 来启用与 Web 服务器持久的双向通信。客户端 (用户界面) 可以自发发送消息,服务器也可以发送消息。

Existing technology(JavaScript) 要求客户端启动所有操作 – 服务器无法向客户端发送任何未请求的任何内容。所以脚本需要不断刷新和可能没有改变的 re-requesting 数据。 Websockets 在 「push」 基础上工作更多,每当有新数据下降管道。

不幸的是,大多数 (我可以找到,无论如何)websocket 实现需要一个特定的服务器应用程序工作。人们将在端口 80 和 443(http 和 https) 上运行 Apache,并在另一个端口 (即 8000 或 8080) 上运行另一个系统 (通常为 Node.js) 来处理 Websocket 请求。

这显然是有效的,但它有一些缺点。

我有一个我想要构建的插件,将大大受益于在 WordPress 中使用 websockets 。但是如果用户需要安装第二个 Web 服务器 (通常不可能拥有共享主机的人),那么它将不能作为插件。

所以,对于任何有经验的人,您如何使 WordPress 与 websockets 兼容?您会使 WordPress 处理通信本身,还是将另一个 mini-server 脚本绑定到插件中?如果你已经做到了这一点,那么你如何完成它而不会破坏 WordPress 本身?

可能的资源?


9/21/11 更新

随着所有关于 Apache(最常用于在共享主机上运行 WP 的服务器) 的讨论,本来不能真正处理 websockets,我想知道一个替代方案。几个插件 (例如,JetPack) 与外部服务或 API 通信来生成内容。

统计数据请求 Automattic 的内容。 Akismet 从外部服务器来回发送数据。截止日期后在发布时提交内容。几个 SEO 工具通过外部系统传递 back-and-forth 。

因此,作为在 WordPress 插件中存放 Websocket 代码的替代方法,在中央位置托管 Websocket 服务并且 WordPress 前端与之进行交互是否可行?

最佳解决方案

WebSockets 使用 websockets 协议:WS:/example.com/yourscript.js 并打开同步连接 – 这意味着连接被保持打开并专用于浏览器。

httpd 服务器,如 apache2(大多数共享托管提供商使用) 使用 http 协议:http://example.com/yourscript.js 并打开异步连接 – 这意味着服务器和浏览器之间没有连接保持打开。 (您可以通过设置某些配置参数来延长打开的连接,但一般来说,它是异步的。)

您可以想像,维护浏览器和服务器之间的开放连接,为每个浏览器连接节省了更多的服务器资源,因此在每次请求后删除连接时,都会对服务器资源征税。共享主机提供商可以理解为不支持 WS 共享主机。

虽然某些共享主机可能安装了 mod_python,从而允许您的插件用户运行 pywebsocket,pywebsocket 自己的文档清楚地表明 「pywebsocket 旨在用于测试或实验目的」 。

所以,虽然可以想象一个插件绑定 python 代码来创建一个 pywebsocket 服务器,给定一个支持它的 apache 服务器,我不认为分发一个这样做的插件是合理的。

次佳解决方案

为了回应您的更新,在我看来,根据我所做的研究,这将是最好的选择。更好的是创建前端插件,并创建外部 websocket 服务与插件交谈,并收取费用,以便您可以通过您的想法获利,如果你想要的话。您甚至可以提供 websocket 服务的源代码,并在插件中创建一个设置,以设置 websocket 服务所在的位置 (哪个域/IP 和端口) 。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。