国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

Gateway worker sendToAll()導(dǎo)致許多ws鏈接斷開

小W
 $worker = new BusinessWorker();
 $worker->name = 'Business_Server';
 $worker->count = 4;

Events.php

 if($businessWorker->id == 0){
        $inner_http_worker = new Worker('http://0.0.0.0:9191');
        $inner_http_worker->onMessage = function(TcpConnection $http_connection,Request $data){
            Gateway::sendToAll(json_encode($data));
        };
 }

當(dāng)前有5000+ ws鏈接,以上http端口調(diào)用“http://12。0.0.1:9191/?message=1&users=all” 后導(dǎo)致許多ws鏈接斷開,
請問大佬們需要怎么優(yōu)化?

1666 4 0
4個回答

walkor 打賞

運(yùn)行 php start.php status
截圖,截圖截全

  • 暫無評論
小W

沒有發(fā)送http請求前:

http請求:http://12。0.0.1:9191/?message=1&users=all 之后

都是busy

strace 其中一個pid:

  • 暫無評論
小W

是不是卡在數(shù)據(jù)庫讀寫這一塊了

  • 暫無評論
walkor 打賞

是在壓測么?

客戶端是否有超時邏輯?比如發(fā)送數(shù)據(jù)后要求多少秒內(nèi)需要回應(yīng)否則斷開這種邏輯。如果5000個客戶端同時發(fā)請求到服務(wù)端,服務(wù)端處理不過來(尤其有數(shù)據(jù)庫)可能會導(dǎo)致響應(yīng)超時,導(dǎo)致客戶端斷開。

這5000客戶端收到服務(wù)端的sendToAll的數(shù)據(jù)后會向服務(wù)端發(fā)請求?
建議客戶端收到sendToAll的數(shù)據(jù)后不要向服務(wù)端發(fā)送數(shù)據(jù),至少不要發(fā)送帶有IO操作的請求數(shù)據(jù),正式環(huán)境這樣搞其實(shí)和DDOS自己的服務(wù)器差不多效果。服務(wù)端處理不過來導(dǎo)致業(yè)務(wù)延遲,導(dǎo)致連接斷開。

busy的原因是businessworker收到了大量的請求需要處理,這些請求積壓在緩沖區(qū),需要一個一個處理,所以沒有辦法及時響應(yīng)status,顯示busy。兩個截圖Gateway請求量增加了10W+,這請求量不小,你要確認(rèn)下你的業(yè)務(wù)邏輯是否足夠快,數(shù)據(jù)庫是否能支撐這么大的請求量。尤其不要做sendToAll后客戶端向服務(wù)端發(fā)慢請求DDOS自己這種操作。

  • 小W 2022-01-06
    1. 壓測的客戶端鏈接也在同一臺服務(wù)器

    2.服務(wù)端接受到ws連接后存儲db數(shù)據(jù)信息

    1. 服務(wù)端在接受到消息時,檢查消息如果不在線也存儲db
  • 小W 2022-01-06

    是不是因?yàn)檫@幾點(diǎn)的原因?

  • walkor 2022-01-06

    總體來說就是你的服務(wù)器配置支撐不了這么大的請求量,請求積壓了。想辦法減少請求量,想辦法加快請你去處理速度,包括減少數(shù)據(jù)庫包括Gateway接口的操作。

    服務(wù)端接受到ws連接后存儲db數(shù)據(jù)信息

    不要這么操作,你要考慮到服務(wù)重啟時上萬在線客戶端同時發(fā)起連接請求時,數(shù)據(jù)庫承受不住的。連接事件最好輕量。

  • 小W 2022-01-06

    好的,謝謝大佬

年代過于久遠(yuǎn),無法發(fā)表回答
??