<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 11, comments - 9, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Netty整理和基于Netty封裝了一個web game通訊層

    Posted on 2012-05-15 17:09 steven.cui 閱讀(13452) 評論(7)  編輯  收藏 所屬分類: java

    NIO的理解,請參照:http://www.goldendoc.org/category/java-nio/

    Netty的一些理解,請參照:

    http://www.kafka0102.com/2010/06/167.html

    http://rdc.taobao.com/team/jm/archives/423


    Netty的高可靠性,可伸縮性,以及效率的確讓人著迷,為什么Netty這么快呢?

    Netty高效的原因:

    1. 實現了多路Selector用于讀和注冊,線程數量是cpu*2,reactor都是這么做的,自己處理寫事件,這個我在自己框架中也是這么做的,nio的selector處理注冊和讀,并且也優化了wakeup,Netty中的wakeup也是優化過的,本身一次wakeup對Nio并不大,但是大批量并發的時候就需要進行優化處理了,只有當selector堵塞的時候進行wakeup,或者說需要下次立刻返回的時候wakeup。
    2. Netty在開啟多路讀寫的時候,用的是DirectBuffer,并用了SoftReferrence來做緩存優化,減少傳輸數據的內存移動和GC。還有預測數據算法,這個具體能不能提高有待討論
    3. 并發的控制,基于SEDA的設計理論構建的高效事件模型,真正的異步處理,吞吐量和伸縮性都可以得到保證。


    nio的實現并不復雜,但想讓你的底層通訊,效率,以及可伸縮性和高可靠性做好,還是極具挑戰性的。


    目前有個項目是自己寫的nio,但效率比起netty來,小了幾個數量級,當然以本人一己之力能做到目前這個情況,還算自己滿意,也用到生產環境中了,一個web game,及時性要求很高,一臺server,5000人沒問題。同時廣播消息在10000人以內,當然有些優化是在業務邏輯層面的。當然比起netty的效率來講還是差了幾個數量級。


    除了高效,Netty在擴展性方面做的不錯:

    1. 豐富的decoder/encoder實現,你可以輕松的繼承一個類實現自己的邏輯,例如游戲中,直接繼承FiledLengthBaseFrameDecoder即可。
    2. 自行添加decoder或者encoder,自由的控制事件流向順序,通過這個,可以實現一些協議加密解密,協議過濾器,統計工具等等
    3. 提供很多工具類:Timeout的一些實現,還有ChannelBuffers的一些工具,通常情況下,我們為了減少對Netty的依賴,會自己再封裝一層,以完全達到脫離Netty的目的,都會再次封裝一層ChannelBuffer,這樣目的是不要讓上層邏輯跟底層通訊有任何關聯,降低耦合,當然也在為考慮更換底層通訊而不影響上層邏輯。
    4. 提供監聽底層消息的ChannelFuture,例如發送完消息可以斷開連接等等
    5. 可調控的通訊架構,可以根據業務的吞吐量來調整,Netty的各項參數不只有socket的一些設置,還能控制事件流順序和吞吐量的大小等等。


    最后,基于Netty我簡單封裝了一個web game所具備的一些GameBuffer,目前比較簡陋,后續可能加入一些別的功能。


    項目在:https://github.com/cuixin/XGameEnginee/



    評論

    # re: Netty整理和基于Netty封裝了一個web game通訊層  回復  更多評論   

    2012-08-19 19:02 by rabee
    你好,一直使用mina,剛開始研究netty,還沒在生產環境中使用,看了你的框架有些疑問,還望指教

    # re: Netty整理和基于Netty封裝了一個web game通訊層  回復  更多評論   

    2012-08-20 10:59 by steven.cui
    @rabee 有什么問題請講

    # re: Netty整理和基于Netty封裝了一個web game通訊層  回復  更多評論   

    2012-09-29 12:11 by javavaj
    你好,看了下你的代碼,GameWorker是單線程嗎?

    # re: Netty整理和基于Netty封裝了一個web game通訊層[未登錄]  回復  更多評論   

    2012-12-07 18:32 by tony
    你好,我也做了兩年游戲,想和你有進一步的溝通,我的郵箱:yong_xiaoyang@126.com,希望收到你的回復,謝謝!

    # re: Netty整理和基于Netty封裝了一個web game通訊層  回復  更多評論   

    2013-02-20 19:13 by 勤奮的asialee
    博主這塊寫的挺好的,我完全看了,不過我也寫了一些關于編解碼器的,請批評指正http://asialee.iteye.com/blog/1769508

    # re: Netty整理和基于Netty封裝了一個web game通訊層[未登錄]  回復  更多評論   

    2013-07-20 00:06 by wade
    你好,你的代碼我有研究過,寫的很不錯,但是我想問下你,怎么做到把消息隊排分開,提高游戲引擎吞吐量

    # re: Netty整理和基于Netty封裝了一個web game通訊層  回復  更多評論   

    2013-08-02 15:11 by steven.cui
    @wade
    目前我在研究erlang,java可以借鑒erlang的多進程并發思想來做,Actor/SEDA設計模型可以增加吞吐量和并發,如果你有C和lua經驗,可以參考云風的skynet,當然還可以考慮Scala或者Clojure,Scala本身支持函數式,更有Actor模型存在,也有很多國內的朋友在用Scala寫游戲服務器。

    另外一個無鎖的消費生產者模型,Disruptor,如果你有能力自己實現Actor/SEDA模型,可以將Disruptor嫁接進來。

    游戲服務器的難度設計在于幾點:
    1.多服務器的通訊和穩定,以及各種容錯機制,熱更新。
    2.快速迭代的測試模型和性能驗證模型。(解決上下文的關聯問題,我能想到的是盡量利用函數式語言來做)
    3.監控和相應的配置工具,目前Erlang的體系的確是很強大,幫你做了很多。

    至于XGameEnginne,我們之前的上線游戲,都是通過業務邏輯的方式分配線程,此方法不算是特別智能,但也在一定程度上可以解決部分并發的問題,其實Erlang來做的話也可以這么設計,但卻比Java有更好的辦法,畢竟Erlang對進程的開銷實在太小了。

    最后,選擇有很多,不要讓語言成為你的限制,當然這是扯淡,關鍵是要找合適的:D
    主站蜘蛛池模板: 在线成人爽a毛片免费软件| 午夜网站在线观看免费完整高清观看| 亚洲毛片在线免费观看| 久久久久久亚洲av成人无码国产| 在线免费视频你懂的| 国产成人精品日本亚洲网站| 国色精品va在线观看免费视频 | 免费日本一区二区| 亚洲AV午夜福利精品一区二区| 日韩成人免费视频| 亚洲网站免费观看| 最近中文字幕免费mv视频7| 亚洲精品GV天堂无码男同| 国产精品四虎在线观看免费| 人成免费在线视频| 国产亚洲一区二区手机在线观看| 91精品手机国产免费| 亚洲熟女精品中文字幕| 日本免费无遮挡吸乳视频电影| 羞羞视频免费网站入口| 亚洲色偷偷综合亚洲AVYP| 欧洲精品99毛片免费高清观看| 亚洲免费视频网址| 国产乱子伦精品免费无码专区| xxxx日本在线播放免费不卡| 亚洲欧洲第一a在线观看| 国产1024精品视频专区免费| 美女被免费视频网站| 亚洲日韩aⅴ在线视频| 中文字幕乱码免费视频| 无人视频在线观看免费播放影院| 亚洲男同帅GAY片在线观看| 免费观看的毛片大全| 美女视频黄a视频全免费网站色 | 久久久精品视频免费观看| 久久久久亚洲AV无码专区首JN| 永久免费看bbb| 免费国产在线视频| 亚洲第一成年免费网站| 亚洲成AV人在线观看天堂无码| 成全视频免费高清|