GatewayClient connection pool實現?

rurikaxx

我們的系統目前有Web server與Gatewayworker Server( Gatewayworker 分散式架構 )

系統內客戶端之間所有的Websocket訊息傳輸

都是透過Web server使用GatewayClient來推送

但由於GatewayClient發送訊息時好像都是短連接

每次發送都應該需要建立連線

但當request數量太大時 建立連線會浪費許多的效能

甚至佔滿Web server對外連接數的上限導致程序崩潰

不知道有沒有辦法在Web server建立一條對Gatewayworker Server的長連接

讓所有的訊息推送都透過這個長連接來推送( 類似connection pool的概念 )?

2272 5 0
5个回答

latin

貌似做不到吧,web server请求完毕后所有的连接都会销毁的。

  • 暂无评论
rurikaxx

應該是可以做到
一般來說connection pool的進程與web request的進程是分開的
應該可以用event或libevent拓展自己寫
但就要花點時間研究了
所以想知道workerman的框架有沒有現成的方法可用

  • 暂无评论
walkor

GatewayClient 可以设置Gateway::$persistentConnection = true; ,会复用web server 到gateway的连接。

但是因为web server是请求响应式的,这种机制不好做web server到gateway之间长连接的心跳保活,所以可能会导致web server到gateway的连接长时间不通讯而被防火墙等清理,导致连接异常断开。有时候gateway重启,web server可能也检测不到,导致复用连接失败,重新建立连接,有可能导致当前的消息发送失败。所以这种模式可能会有一些问题。

一般根据手册优化好linux内核就不会有频繁短连接导致服务器异常的情况。

  • 暂无评论
rurikaxx

請問一下設定Gateway::$persistentConnection = true;的話
是只有當前的web請求建立的websocket connection會被複用
但新的web請求還是會建立新的websocket connection嗎?
已經有依照手冊优化linux内核 但當web server發出的request數太高的時候
程序還是會崩潰
感謝walkor的回覆!!!

  • 暂无评论
walkor

这里的连接复用是只webserver到gateway之间的通讯连接是复用的,与客户端到gateway的websocket连接复用没有关系。

崩溃具体现象和错误日志是?

  • 暂无评论
年代过于久远,无法发表回答
🔝