WordPress能支持WebSockets吗?

时间:2011-09-19 作者:EAMann

Websockets 是HTML5中的一种酷炫的尖端技术。基本上,您可以打开websocket来启用与web服务器的持久、双向通信。客户端(用户界面)可以自动发送消息,服务器也可以发送消息。

Existing technology (JavaScript)要求所有内容都由客户端启动-服务器无法向客户端发送客户端没有请求的任何内容。因此,脚本需要不断刷新和重新请求可能没有更改的数据。Websockets在一个;push"E;并随时提供新数据。

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

显然,这是可行的,但也有一些缺点。

我有一个我想构建的插件,它将从WordPress中使用websockets中受益匪浅。但是,如果用户需要安装第二个web服务器(通常对于共享主机的用户来说是不可能的),那么它就不能作为插件工作。

那么,对于任何有经验的人来说,您将如何使WordPress与websockets兼容?您会让WordPress自己处理通信,还是将另一个迷你服务器脚本捆绑到插件中?如果你已经这样做了,你是如何在不破坏WordPress本身的情况下完成的?

可能的资源?

  • Extendible Web Socket Server
  • PHP Websocket
  • PHP and Websockets

    Stats从Automatic请求内容。Akismet从外部服务器来回发送数据。截止日期后,在发布时提交内容。一些SEO工具通过外部系统来回传递信息。

    因此,作为在WordPress插件中容纳websocket代码的替代方案,在中心位置托管websocket服务并让WordPress前端与之交互是否可行?

5 个回复
最合适的回答,由SO网友:marfarma 整理而成

WebSockets使用WebSockets协议:WS:/example。com/yourscript。js并打开一个同步连接-意味着该连接保持打开状态并专用于浏览器。

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

可以想象,保持浏览器和服务器之间的开放连接会为每个浏览器连接占用更多的服务器资源,因此,与每次请求后删除连接相比,服务器资源的负担更大。共享主机提供商不愿意在共享主机上支持WS,这是可以理解的。

虽然某些共享主机可能安装了mod\\u python,从而允许插件用户运行pywebsocket, pywebsocket自己的文档清楚地表明“pywebsocket用于测试或实验目的。”

因此,尽管有人可能会想象一个插件捆绑python代码来创建pywebsocket服务器,但给定一个支持它的apache服务器,我认为分发这样的插件是不合理的。

SO网友:user15143

根据你的最新消息,在我看来,根据我所做的研究,这将是最好的选择。更好的做法是创建前端插件,并创建外部websocket服务来与插件进行对话,并为此收取费用,以便您可以根据需要将您的想法转化为金钱。您甚至可以提供websocket服务的源代码,并在插件中创建一个设置来设置websocket服务所在的位置(哪个域/IP和端口)。

SO网友:petermolnar

为此,请忘记“经典”apache2-apache2 mpm prefork。也许apache2 mpm事件可以处理这个问题,但它是实验性的。由于apache2不是事件驱动的,所以@marfarma描述的问题确实存在。例如,对于这种服务,您需要一个事件驱动的web服务器cherokee 或nginx。

nginx 对WordPress来说是一个真正的好处(因为WordPress.com也将其用作服务器),并且它可以将指定的请求代理给节点。例如js服务。

本主题中的一些示例:

SO网友:Rick Curran

另一个可能的解决方案是使用第三方web套接字提供商,我已经使用了Pusher(http://pusher.com/)有一点,您可以使用一个API,它可能会很好地满足您的需要。我一直在考虑如何在我自己的WordPress网站上使用它。

一个可能的缺点是,其他试图使用你的插件的人也必须获得一个推送帐户才能使其工作。与安装自己的Web Sockets服务器并维护它相比,使用它要容易得多。实际上,当其他人试图使用您的插件时,这将是一个优势。

SO网友:ZaMoose

简单的回答是:是的,它是可以做到的。不过,我可能会研究一些比您托管的单点故障VP更分散的东西。也许可以研究一些负载平衡的EC2系统或类似的系统?(我假设你有收入来源来提供这些便利。)

结束

相关推荐

有条件地加载快捷码的JavaScript/CSS

我发布了一个插件,该插件创建了一个短代码,并要求在包含该短代码的任何页面上加载一个JavaScript文件和一个CSS文件。我可以在所有页面上加载脚本/样式,但这不是最佳做法。我只想在调用短代码的页面上加载文件。我找到了两种方法,但都有问题。Method 1 在shortcode处理程序函数内将标志设置为true,然后在wp_footer 回调。如果这是真的,它使用wp_print_scripts() 加载JavaScript。问题是它只适用于JavaScript,而不适用于CSS,因为CSS应该在内部声