問題描述

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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。