漲姿勢 – 不一樣的服務端長連接方案 – 客戶端代理

分類:技術 時間:2017-01-13

仔細再看一次騰訊云的小程序解決方案,發現一個新大陸。

傳統的 LAMP 架構,PHP-CGI 這種方式是很難處理長連接的。要么寫死循環的方式來握住請求,要么使用 swoole 這種,通過 C 拓展來支持。

而 NodeJS 由于官方 DEMO 就是支持跑一個 HTTP 服務,所以處理這些長連接會方便一些(大家好懂一些,我覺得 PHP-CLI 方式也是一樣的)。

信道服務

建立連接過程

  1. 小程序請求業務服務器
  2. 業務服務器和信道服務建立連接
  3. 業務服務器告訴小程序你可以和信道服務建立 ws 了
  4. 小程序和信道服務建立 ws
  5. 信道服務請求業務小程序的 ws 建立完成

連接成功后的通信方式

  1. 小程序請求信道服務,信道服務轉發請求給業務
  2. 業務請求信道服務,信道服務推送到客戶端

我最開始看的時候,沒注意信道服務是一個云服務,琢磨著騰訊云的 SDK 難道有什么新的黑魔法來實現 PHP 的長連接。

看里面的代碼,各種 onConnect\onRequest,看著就很像長連接的 API,但他基于 CI 是怎么實現的長連接了?看 composer.json 里面沒有用什么黑魔法,搜索代碼里面沒沒看到任何死循環。

客戶端代理

為什么信道服務的 icon 是一朵云?

原來騰訊云把這個信道服務抽象成了一個 PaaS 的云服務,這根本就是一個客戶端代理。而開源出來的 PHP-SDK,里面沒有任何長連接的實現方案。

  • 業務服務器 -gt; 小程序:業務服務器只需要請求信道服務即可,信道服務接收到業務的請求后,會將 HTTP Body 部分,轉成 WS 的消息推送給小程序。
  • 小程序 -gt; 業務服務器:則正常通過 WS 發送消息給信道服務,信道服務轉成 HTTP 請求轉發到業務服務器。

對于一些使用 PHP 開發的歷史業務,大規模的長連接改造是非常困難,但部署一個長連接轉發服務卻容易很多(比如用 NodeJS 來寫一個)。

騰訊云的這個思路可以幫助各種業務快速支持包括 SSE 和 WS 這兩種長連接方案。并且由于業務服務器本身是 HTTP 方式,可以很容易給低版本 IE 做輪訓兼容。

最后感謝騰訊云開源了他們的方案。


Tags: 微信小程序開發 騰訊云

文章來源:https://www.mxgw.info/a/client-proxy-for-websocket


ads
ads

相關文章
ads

相關文章

ad