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

數(shù)據(jù)量上300以后經(jīng)常會(huì)出現(xiàn)連接失敗的問題

frontlon

有的時(shí)候播間連接數(shù)達(dá)到300人的時(shí)候,socket連接就會(huì)一直pending...
最后就連接失敗~~不能進(jìn)行數(shù)據(jù)接收。

請(qǐng)問這個(gè)問題處在哪里?應(yīng)該如何解決和避免?

3406 2 0
2個(gè)回答

frontlon

服務(wù)器是centos的。我用php啟動(dòng)的workerman進(jìn)程,發(fā)現(xiàn)該php進(jìn)程CPU占用97%到100%。
請(qǐng)問該如何優(yōu)化下?

  • 暫無評(píng)論
walkor 打賞

這個(gè)是PHPSocket.IO,不是直接用的workerman。

cpu占用多少和業(yè)務(wù)模型以及代碼質(zhì)量有關(guān)系。
業(yè)務(wù)模型:比如300個(gè)人在線,每個(gè)人1秒向其它300人廣播消息,那么每秒就是300*300=9W/秒的消息量,cpu占用肯定會(huì)很高。
代碼質(zhì)量:還要檢查業(yè)務(wù)邏輯代碼是否有問題,比如死循環(huán)、瘋狂循環(huán)超大數(shù)組等導(dǎo)致cpu很高。

計(jì)算用戶訪問量
你需要計(jì)算下用戶訪問量,看看PHPPSocket.IO每秒接收消息 發(fā)送消息量有多少?是否可以在業(yè)務(wù)上優(yōu)化下減少消息量。300人在線導(dǎo)致cpu97%到100%確實(shí)有點(diǎn)夸張,不是業(yè)務(wù)模型有問題就是代碼質(zhì)量問題。

對(duì)比
http://m.wtbis.cn頁面底部 用戶在線數(shù)實(shí)時(shí)統(tǒng)計(jì)功能就是PHPSocket.IO做的,每秒廣播給所有在線用戶當(dāng)前在線人數(shù)以及打開頁面數(shù),每天下午峰值也是300左右,但是因?yàn)闃I(yè)務(wù)模型簡單,能夠計(jì)算到消息量 300/每秒 左右,所以能看到服務(wù)器負(fù)載是0,cpu消耗幾乎也是0

建議
另外PHPSocket.IO是單進(jìn)程的,內(nèi)部工作機(jī)制比較復(fù)雜,性能相比workerman或者GatewayWorker差很多,建議聊天服務(wù)用GatewayWorker去做,可以多進(jìn)程多服務(wù)器部署,支持上萬人很輕松。

  • frontlon 2017-02-15

    謝謝了。我抽空把程序改成Gatewayworker版的。
    請(qǐng)問目前在php.ini方面有什么優(yōu)化建議嗎?

  • walkor 2017-02-15

    php.ini沒有什么好優(yōu)化的

  • frontlon 2017-02-15

    我的網(wǎng)站類似于即時(shí)留言板,用戶提問后不在前臺(tái)顯示,后臺(tái)管理員回復(fù)后,自動(dòng)在前臺(tái)顯示信息。這個(gè)功能用GatewayWorker合適嗎?

  • frontlon 2017-02-15

    @1133:還有就是,如果現(xiàn)在改成GatewayWorker,前臺(tái)js部分不用改變吧?只改變php程序即可?

  • walkor 2017-02-15

    js要改。你最好確認(rèn)下到底是什么問題再動(dòng)手

  • frontlon 2017-02-15

    目前問題就是,workerman占滿了CPU,導(dǎo)致很多時(shí)候連接失敗。但是小弟是菜鳥,實(shí)在想不出什么解決辦法~

  • stephen 2017-02-15

    workerman 只是一個(gè)運(yùn)行 app 的容器,你應(yīng)該在你的應(yīng)用里面設(shè)置記錄運(yùn)行的調(diào)試代碼,不斷定位直到找到什么地方最耗時(shí)。

    比如

    $code_xxx_start = microtime(true);
    file_put_contents('/tmp/app_run.log', 'code:xxx:start'.$code_xxx_start."\n", FILE_APPEND)

    // codes

    file_put_contents('/tmp/app_run.log', 'code:xxx:end'.microtime(true)-$code_xxx_start."\n", FILE_APPEND)

    從你的應(yīng)用的入口代碼開始,一步一步不斷縮小范圍。

  • frontlon 2017-02-15

    @1 了解了。您說的方法我試試。

  • frontlon 2017-02-15

    今天我把Workerman移動(dòng)到windows服務(wù)器了,開始運(yùn)行正常,但1個(gè)小時(shí)候在cmd中報(bào)了如下錯(cuò)誤:
    next called after client was closed - ignoring socket
    next called after client was closed - ignoring socket
    next called after client was closed - ignoring socket
    next called after client was closed - ignoring socket
    next called after client was closed - ignoring socket
    next called after client was closed - ignoring socket
    next called after client was closed - ignoring socket
    next called after client was closed - ignoring socket
    next called after client was closed - ignoring socket
    next called after client was closed - ignoring socket
    .......

    這個(gè)錯(cuò)誤非常多。

    請(qǐng)問這是哪里的問題?

  • xiuwang 2017-02-16

    官網(wǎng)說win系統(tǒng)只用做開發(fā)調(diào)試啊,不建議用在生產(chǎn)環(huán)境

  • frontlon 2017-02-18

    @1459:了解了,謝謝啦!

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