我們的系統目前有Web server與Gatewayworker Server( Gatewayworker 分散式架構 )
系統內客戶端之間所有的Websocket訊息傳輸
都是透過Web server使用GatewayClient來推送
但由於GatewayClient發送訊息時好像都是短連接
每次發送都應該需要建立連線
但當request數量太大時 建立連線會浪費許多的效能
甚至佔滿Web server對外連接數的上限導致程序崩潰
不知道有沒有辦法在Web server建立一條對Gatewayworker Server的長連接
讓所有的訊息推送都透過這個長連接來推送( 類似connection pool的概念 )?
貌似做不到吧,web server请求完毕后所有的连接都会销毁的。
應該是可以做到
一般來說connection pool的進程與web request的進程是分開的
應該可以用event或libevent拓展自己寫
但就要花點時間研究了
所以想知道workerman的框架有沒有現成的方法可用
GatewayClient 可以设置Gateway::$persistentConnection = true; ,会复用web server 到gateway的连接。
但是因为web server是请求响应式的,这种机制不好做web server到gateway之间长连接的心跳保活,所以可能会导致web server到gateway的连接长时间不通讯而被防火墙等清理,导致连接异常断开。有时候gateway重启,web server可能也检测不到,导致复用连接失败,重新建立连接,有可能导致当前的消息发送失败。所以这种模式可能会有一些问题。
一般根据手册优化好linux内核就不会有频繁短连接导致服务器异常的情况。
請問一下設定Gateway::$persistentConnection = true;的話
是只有當前的web請求建立的websocket connection會被複用
但新的web請求還是會建立新的websocket connection嗎?
已經有依照手冊优化linux内核 但當web server發出的request數太高的時候
程序還是會崩潰
感謝walkor的回覆!!!
这里的连接复用是只webserver到gateway之间的通讯连接是复用的,与客户端到gateway的websocket连接复用没有关系。
崩溃具体现象和错误日志是?