簡體   English   中英

將websocket添加到現有應用程序

[英]Adding websockets to existing application

所以我寫了這個不錯的SAAS解決方案,並得到了一些真正的客戶。 現在,客戶端請求添加一些需要websocket的功能。

為了使事情整潔,我想使用另一台服務器來管理websocket。

我當前的堆棧是一個AWS應用程序負載平衡器,其后有兩台服務器-其中一台是當前的應用程序服務器。 這是一台運行PHP的Apache Web服務器。

客戶端由AngularJS驅動。

第二台服務器(尚不存在)將轉到Nginx,會話將存儲在第三台Memcache服務器上。

Websocket和應用程序服務器都在同一域上,使用不同的端口將請求發送到正確的服務器(AWS ELB允許通過端口將請求發送到不同的服務器組)。 應用程序和websockets都將由PHP和Ratchet驅動。

我的問題是兩個:

  • 適用於經驗豐富的開發人員-這樣的體系結構聽起來合理嗎(我還沒有針對100K的並發目標-我需要一個可行且負擔得起的解決方案,目標是在此階段最多5000個並發)。
  • 從應用程序服務器(具有生成請求的邏輯)向Websocket服務器發送請求的最佳方法是什么?

請注意,我是websocket的新手,所以也許有更好的方法可以做到這一點-我將不勝感激。

我正在使用帶有SPA的Rat​​chet來驅動Web應用程序。 我使用Traefik作為前端代理,但是,是的,Nginx在這里很流行,我敢肯定這會很好。 我喜歡Traefik,因為它能夠根據Kubernetes等配置文件更改,API觸發器和配置更改無縫重定向流量。

我在評論中同意Michael的觀點-為80或443以外的Web套接字使用端口可能會導致您的用戶遇到連接問題。 家庭連接通常在非標准端口上都可以,但公共wifi,企業防火牆和移動數據都可能帶來問題,最好不要冒險。

經過一番閱讀后,您的5,000個並發連接可能需要進行OS級調整。 我似乎記得1,024個連接可以輕松完成,但是該級別的幾次連接需要測試( 例如,請參見此處 ,盡管請注意注釋流可以追溯到幾年前)。 也許您可以設置一個測試工具來觸發應用程序上的Web套接字請求,例如使用兩個Docker容器? 這將為您提供一種方法,以了解您將在這種規模下遇到哪些限制。

鑒於任何給定的用戶群通常都不會同時處於活動狀態,因此最大的並發用戶數令我震驚,您正在以絕對巨大的規模工作。 您可以做的一件事(我打算做同樣的事情)是在您的前端中添加一個重新連接策略,該策略執行少量重試,然后彈出一個手動重新連接框(Trello做了類似的事情)。 鑒於某些連接會變得不穩定,最好給它們中的一些斷開的機會,所以您剩下的管理連接就更少了。 您還可以在前端添加一個空閑計時器,以避免毫無意義地保持未使用的連接打開。

如果您想進行一些功能測試,請考慮使用PhantomJS-我在這里使用PHPUnit Spiderling ,並且Web套接字似乎可以正常工作(到目前為止,我一次只嘗試過一次)。

有幾個PHP庫可以發送Web套接字請求。 我使用Websocket Client for PHP ,到目前為止,它對我來說都可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM