日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nodejs开发游戏服务器遇到的性能问题

發布時間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nodejs开发游戏服务器遇到的性能问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述: 使用nodejs開發了一個游戲服務器,為了盡可能提高服務器的性能,服務器采用多進程的架構,前面處理玩家socket連接的是多個nodejs進程,使用 child_process 模塊,服務器啟動時fork出來,而處理玩家游戲邏輯的是單獨一個nodejs進程(因為玩家之間需要交互,而且玩家都是有狀態的,所以無法分成多個進程)這個作為主進程;主進程與子進程之間使用使用child_process模塊內建的通訊方式進行通訊;

現在服務器性能出現瓶頸,服務器同時在線去到1500人左右,CPU占用率在40+左右,目標是3000人同時在線;通過CPU Profile分析,唯一無狀態的可分離出來而且比較占用CPU的,就是玩家數據讀數據庫和保存數據庫的時候,數據庫使用的是mongodb,所以現在想把讀寫數據庫的邏輯獨立到一個新的進程中;但是問題來了,由于玩家的數據是一個大的Json結構,最大的大小能達到600+K,而node的child_process模塊的內建進程間通訊是通過JSON.stringify和JSON.parse來轉換成字符串來進行通訊的,所

以獨立出來以后,性能的問題,又指向了child_process模塊中的進程之間的通訊的函數,通過實驗: JSON.strinify 一個600K+玩家的數據平均需要35ms,JSON.parse 一個600K+玩家的數據平均需要20ms,而且這兩個函數都是同步的,會造成阻塞;這也就是說主進程無法把一些包含大數據處理的任務分派到其他進程去做,這也直接限制了主進程的承載量和在線玩家人數;

嘗試找過一寫解決的方案: 1.異步版的 JSON.stringify 和 JSON.parse ,可惜沒有結果,正如這里的討論:https://github.com/joyent/node/issues/7543 2.為node加入多線程?nodejs有幾個多線程的庫,但是貌似都不支持共享進程內存,無法操作主進程的內存,只能通過字符串進行交換數據,也就是說輪回到以上進程間的通訊問題;

百牛信息技術bainiu.ltd整理發布于博客園

這個問題一直比較困擾,還沒有找到好的解決方法,希望大牛來賜教

轉載于:https://www.cnblogs.com/bainiu/p/7541440.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的nodejs开发游戏服务器遇到的性能问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。