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

異常退出exit with status 9

defeatlr

測試客戶端用的workerman

    // 當(dāng)前鏈接每1秒發(fā)個心跳包
    Timer::add(1, function () use ($con) {
        $data = 'send 8000,86358603733073,0003,AA00000000,0003,00,0818031611,,,,0000'. "\r\n";
        for ($i=0;$i<100;$i++){
            $data .= 'send 8000,86358603733073,0003,AA00000000,0003,00,0818031611,,,,0000'. "\r\n";
        }
        $con->send($data);
    });
    $con->connect();
    echo $count, "connections complete\n";

開了100個連接,GW運行幾分鐘報錯

exit with status 9 
Warning: stream_socket_client(): unable to connect to tcp://127.0.0.1:12345 (Cannot assign requested address)

如果連接數(shù)在開多點,Gateway也會無法連接,錯誤信息

Exception: can not connect to tcp://127.0.0.1:2901 Connection refused in GatewayWorker/vendor/workerman/gateway-worker/src/Lib/Gateway.php:725

請問這個錯誤是不是
maxSendBufferSize 是發(fā)送緩沖區(qū)的大小,當(dāng)服務(wù)端發(fā)送速度大于客戶端接收速度時,數(shù)據(jù)會擠壓在發(fā)送緩沖區(qū),如果發(fā)送緩沖區(qū)滿,則觸發(fā)onBufferFull事件回調(diào),在這個事件回調(diào)中做處理(例如停止向客戶端繼續(xù)發(fā)送數(shù)據(jù))。

如果onMesage不能及時處理數(shù)據(jù),數(shù)據(jù)會首先數(shù)據(jù)會積壓在客戶端socket發(fā)送緩沖區(qū)(操作系統(tǒng)提供,大小約幾十K)和workerman服務(wù)器的socket接受緩沖區(qū)(操作系統(tǒng)提供,大小約幾十K),如果客戶端socket發(fā)送緩沖區(qū)滿,則客戶端調(diào)用socket寫操作將阻塞(block模式)或者立刻返回失敗(非阻塞模式),當(dāng)服務(wù)端onMessage處理完畢再次讀取本地socket接收緩沖區(qū)數(shù)據(jù)后,客戶端socket發(fā)送緩沖區(qū)的數(shù)據(jù)會繼續(xù)發(fā)送過來到服務(wù)端socket接收緩沖區(qū),然后依次循環(huán)。

所以當(dāng)服務(wù)端onMessage不能及時處理數(shù)據(jù),不會導(dǎo)致maxSendBufferSize滿,但是可能會導(dǎo)致數(shù)據(jù)在客戶端和服務(wù)端的socket緩沖區(qū)積壓。
引起的?
要怎么解決?

8119 6 0
6個回答

walkor 打賞

Cannot assign requested address 是因為不斷的創(chuàng)建連接把本地socket端口用光了。
參考workerman手冊優(yōu)化下linux內(nèi)核。
另外注意不要無限創(chuàng)建socket連接又不關(guān)閉,會導(dǎo)致本地端口資源迅速耗費光。

  • 暫無評論
defeatlr

嗯內(nèi)核我參照手冊做過優(yōu)化的,估計是我調(diào)用異步任務(wù)的時候不關(guān)閉連接引起的

        $task_connection = new AsyncTcpConnection('Text://127.0.0.1:12345');
        $task_connection->send($message);
        $task_connection->onMessage = function ($task_connection, $task_result) use ($client_id) {
            if ($task_result == 'ok') {
               // $task_connection->close();
                Gateway::sendToClient($client_id, 1);
            }
        };
        $task_connection->connect();

因為我在測試的時候發(fā)現(xiàn)這里連接關(guān)閉以后,好像客戶端會自動斷開連接,我服務(wù)端開了30S的心跳檢測
關(guān)閉異步連接,客戶端就正常不會斷開 我也不知道哪里出問題了
另外我想問下 就是我客戶端發(fā)送的數(shù)據(jù)量 就比如上面這個字符串的大小 會有什么影響嗎?

  • 暫無評論
walkor 打賞

對框架沒什么影響

  • 暫無評論
defeatlr

測試的時候我如果數(shù)據(jù)量小沒問題,如果和上面一樣200條一起發(fā),運行一會有些客戶端連接會被強制關(guān)閉,看了下服務(wù)器負(fù)載是已經(jīng)超了很多了,是不是負(fù)載的原因引起連接被關(guān)閉呢

  • 暫無評論
walkor 打賞

有可能

  • 暫無評論
defeatlr

嗯,明天改分布式在跑下看看,多謝

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