問題描述

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