青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

置頂隨筆

 老手拍磚。轉載請注明  ziyebuboka    http://m.shnenglu.com/ziyebuboka/
        總所周知,要想服務器的高效率實現,那么多線程是不可避免的,但是游戲服務器的多玩家交互的特殊性又使得在邏輯層實現多線程成為了安全瓶頸,以往的架構也是只有通過結構功能的不同來實現多線程,比如 網絡層一個線程 邏輯層一個線程 等等,但是如此并不能有效的通過多線程方式來較好的實現服務器的高效處理。本文就是探討的如何通過結合游戲服務器的特殊性來異變當前主流的網絡包架構模式從而實現服務端的多線程。
      先來看下主流網絡包的架構模式:
              網絡層單獨線程來對LinkManager進行管理,收發消息加入到LinkMessageBuff(單個Link的消息緩存)中---》收到消息加入服務器消息隊列中(這里一般可以通過一個消息回調函數將消息BUFF引出加入到服務器的消息隊列中),而后是服務器的消息處理線程對消息隊列進行處理,拿出消息做邏輯處理。
              如此架構,在通用模式下較好,較好的實現了模塊化方式,單獨庫的形式,并且與服務器的具體邏輯處理耦合度較低(只有服務器開啟的一次網絡包導出消息的回調函數的注冊),但是如此出現的情況是,消息加入到了服務器的主消息隊列,而后只有一個消息邏輯處理線程對其進行操作,進行各個邏輯處理,在某種程度上無法較好的實現多線程。http://m.shnenglu.com/ziyebuboka/
              這種情況下,我也做過討論和嘗試,一般的處理情況是在主消息隊列邏輯處理線程之下再分線程(比如可直接轉發線程,或者根據邏輯模塊轉發線程處理),但是得到的結果是,
               一個是安全上無法做到保證,比如說從主消息隊列再直接轉發分配到多個線程進行處理,但是這里就無法保證消息處理的先后順序了,大家都很清楚,在一些玩家的邏輯操作上,先后順序是需要嚴格的保證的。
              一個是開發成本過高,比如實現單個邏輯模塊單獨線程(比如幫派 國家 隊伍的消息處理單獨),如此的話,在某種邏輯操作上,先后順序可得到保證,但是帶來的后果是開發成本與學習成本過高,在開發過程中將會陷入鎖的海洋。。。。而對于一般程序員來說,實在要求過高。。。而且也過于接近下層結構,無法有效隔離層次,實現較好的模塊化開發。。
      再來看看異變的架構:http://m.shnenglu.com/ziyebuboka/
               首先我們先來說下服務器結構,服務器中的場景(地圖)概念很重要,每一個玩家處在服務器中,最真實的就是處在服務器的某一個場景某一點上,每一個場景都必然具備一個PlayerManager來對玩家進行管理。而每一個玩家對應的正是一個Link。
               如果我們反向思維一下。略微的將LinkManager上移一個層次,將其作為一個場景中的單位,其實一些問題就好解決了。下面具體的說下
              我們把網絡層對LinkManager進行管理收發消息的線程做多線程處理,但是此處有一個難點,就是你無法知道與控制與為什么是這個線程管理這個Link 而另一個線程管理另幾個Link。
              我們將此線程處理也上移一個層次,與場景結合,一個場景一個線程,來管理處于此場景中的玩家Link,每個Link在自己所處于的場景線程中將對消息進行邏輯處理,如此則將前面的幾個問題都解決了。安全上可保證,比如,因為處于一個場景中的,則同步信息可保證安全,而對于上層邏輯也無需關注很多的線程概念。而對于不同場景間的交互信息(比如遠距離組隊,聊天消息),則可通過場景的轉發消息加入目標場景消息隊列的機制來處理,因而消息處理的安全任然可以保證。
             得到的結果就是以場景為單位來做多線程對網絡層進行管理,如此雖然在庫的耦合度上有所增加,但是很多問題都可解決了。此為專門增對游戲服的網絡包的特殊架構,而摒棄了過于通用性所帶來的弊端    
    下面具體的說下網絡層上是如何實現:
                 每一個Link都具備了一個socket,玩家加入到一個場景,則將此Link加入到此場景的LinkMange,并將本socket加入到本場景的fd_set中,而后本場景內只需要對存在于本場景fd_set中的socket做select處理,對本場景內的Link做收發消息處理即可。(本場景LinkManager初始化時已加入服務器socket)http://m.shnenglu.com/ziyebuboka/
   

//補充1:
缺點的確有,從架構上來說,層次互饒的確不好,但是具備了一定的好處,而且可以從設計模式的角度做好層次互分,我是這么認為的
1:首先 如果還是在網絡層一個線程對所有SOCKET做處理 再轉發至各個場景消息隊列 由各個場景的消息處理線程對其做處理,也的確可實現消息處理的多線程,但是不可避免的,在SOCKET對LINK的管理上任然會出現性能瓶頸,因為在進出口上只有一條路(如果進出口這里直接用多線程,則會出現無法知道與控制與為什么是這個線程管理這個Link 而另一個線程管理另幾個Link)
2:如果將LINK的管理層次上到場景級別,缺點是一定層度上與架構第二層次互饒,但是優點是對各個LINK的管理也不再是一條路了,由各個場景LINK管理線程對各個場景內的LINK做管理,也是多條路了,而后再發至各個場景消息隊列,又各個場景消息處理線程對消息做邏輯層次處理,可解決瓶頸
3:從模式角度來解決耦合度的問題,制造SceneLinkManager 掛接各個場景,制造各個SceneLinkManager線程,服務器啟動根據場景來生成,而SceneLogic與PlayerLogic仍在上一層次,消息進入隊列從Link找到Player,并且再制造每個場景的消息邏輯處理線程,消息隊列的邏輯處理只在這里面進行,因而我們仍然認為此Manager還是屬于網絡層次,對于上層邏輯無需關注SceneLinkManager的操作。  

//補充2:
@expter
你說的這個就是文里面一開始提到的主流線程的架構模式了。網絡層一個,邏輯層一個。安全性等等肯定都是可以做到非常好的,但是效率上肯定就差了,其實各個場景本來就是獨立,完全可以單獨開線程,這個文討論的就是如何用安全高效的方式來解決多線程
10:27 不知道 在回復中所提到的也是一種主流方式,在消息的邏輯處理模塊為各個場景單獨開線程,但是網絡層收發消息的處理上仍然還是一個,所以我這里提出的就是可以依據游戲服務器的特殊性,以場景為單位來管理本場景內的LINK,在網絡收發處為每個場景開線程來收發。
也有一種情況可以是直接在網絡層為link分組各個線程管理,比如預生成的1000個Link,0--499號Link是A線程管理,500--999是B線程管理,但是這樣會在消息同步等方面出現問題,比如A玩家和B玩家打架 A砍了B一刀,B砍了A一刀,這時候在先后順序上就有可能出現問題了,A的Link在A線程,B的Link在B線程,有可能是A的操作是先做,但是B線程先Tick了,導致B的砍一刀比A的砍一刀先處理了。。所以我這里提出是以場景為單位來管理Link 則這種問題就會避免了。。
我這里提出的模式就是網絡層以場景為單位線程管理本場景內LINK,而后是各個場景再來各個的邏輯處理線程處理各個場景的消息隊列        


         結束語,本文寫的不好,有不清楚的地方提出我再加。歡迎評論與討論,也希望能得到更好的方式。 http://m.shnenglu.com/ziyebuboka/
posted @ 2010-04-25 00:35 ziyebuboka 閱讀(2748) | 評論 (10)編輯 收藏
     摘要:   閱讀全文
posted @ 2010-01-04 00:35 ziyebuboka 閱讀(3452) | 評論 (14)編輯 收藏
     摘要:   閱讀全文
posted @ 2009-12-31 00:30 ziyebuboka 閱讀(2304) | 評論 (11)編輯 收藏
     摘要:   閱讀全文
posted @ 2009-12-30 02:05 ziyebuboka 閱讀(3006) | 評論 (9)編輯 收藏

2010年4月25日

復活個幾天
posted @ 2010-04-25 00:58 ziyebuboka 閱讀(303) | 評論 (0)編輯 收藏
 老手拍磚。轉載請注明  ziyebuboka    http://m.shnenglu.com/ziyebuboka/
        總所周知,要想服務器的高效率實現,那么多線程是不可避免的,但是游戲服務器的多玩家交互的特殊性又使得在邏輯層實現多線程成為了安全瓶頸,以往的架構也是只有通過結構功能的不同來實現多線程,比如 網絡層一個線程 邏輯層一個線程 等等,但是如此并不能有效的通過多線程方式來較好的實現服務器的高效處理。本文就是探討的如何通過結合游戲服務器的特殊性來異變當前主流的網絡包架構模式從而實現服務端的多線程。
      先來看下主流網絡包的架構模式:
              網絡層單獨線程來對LinkManager進行管理,收發消息加入到LinkMessageBuff(單個Link的消息緩存)中---》收到消息加入服務器消息隊列中(這里一般可以通過一個消息回調函數將消息BUFF引出加入到服務器的消息隊列中),而后是服務器的消息處理線程對消息隊列進行處理,拿出消息做邏輯處理。
              如此架構,在通用模式下較好,較好的實現了模塊化方式,單獨庫的形式,并且與服務器的具體邏輯處理耦合度較低(只有服務器開啟的一次網絡包導出消息的回調函數的注冊),但是如此出現的情況是,消息加入到了服務器的主消息隊列,而后只有一個消息邏輯處理線程對其進行操作,進行各個邏輯處理,在某種程度上無法較好的實現多線程。http://m.shnenglu.com/ziyebuboka/
              這種情況下,我也做過討論和嘗試,一般的處理情況是在主消息隊列邏輯處理線程之下再分線程(比如可直接轉發線程,或者根據邏輯模塊轉發線程處理),但是得到的結果是,
               一個是安全上無法做到保證,比如說從主消息隊列再直接轉發分配到多個線程進行處理,但是這里就無法保證消息處理的先后順序了,大家都很清楚,在一些玩家的邏輯操作上,先后順序是需要嚴格的保證的。
              一個是開發成本過高,比如實現單個邏輯模塊單獨線程(比如幫派 國家 隊伍的消息處理單獨),如此的話,在某種邏輯操作上,先后順序可得到保證,但是帶來的后果是開發成本與學習成本過高,在開發過程中將會陷入鎖的海洋。。。。而對于一般程序員來說,實在要求過高。。。而且也過于接近下層結構,無法有效隔離層次,實現較好的模塊化開發。。
      再來看看異變的架構:http://m.shnenglu.com/ziyebuboka/
               首先我們先來說下服務器結構,服務器中的場景(地圖)概念很重要,每一個玩家處在服務器中,最真實的就是處在服務器的某一個場景某一點上,每一個場景都必然具備一個PlayerManager來對玩家進行管理。而每一個玩家對應的正是一個Link。
               如果我們反向思維一下。略微的將LinkManager上移一個層次,將其作為一個場景中的單位,其實一些問題就好解決了。下面具體的說下
              我們把網絡層對LinkManager進行管理收發消息的線程做多線程處理,但是此處有一個難點,就是你無法知道與控制與為什么是這個線程管理這個Link 而另一個線程管理另幾個Link。
              我們將此線程處理也上移一個層次,與場景結合,一個場景一個線程,來管理處于此場景中的玩家Link,每個Link在自己所處于的場景線程中將對消息進行邏輯處理,如此則將前面的幾個問題都解決了。安全上可保證,比如,因為處于一個場景中的,則同步信息可保證安全,而對于上層邏輯也無需關注很多的線程概念。而對于不同場景間的交互信息(比如遠距離組隊,聊天消息),則可通過場景的轉發消息加入目標場景消息隊列的機制來處理,因而消息處理的安全任然可以保證。
             得到的結果就是以場景為單位來做多線程對網絡層進行管理,如此雖然在庫的耦合度上有所增加,但是很多問題都可解決了。此為專門增對游戲服的網絡包的特殊架構,而摒棄了過于通用性所帶來的弊端    
    下面具體的說下網絡層上是如何實現:
                 每一個Link都具備了一個socket,玩家加入到一個場景,則將此Link加入到此場景的LinkMange,并將本socket加入到本場景的fd_set中,而后本場景內只需要對存在于本場景fd_set中的socket做select處理,對本場景內的Link做收發消息處理即可。(本場景LinkManager初始化時已加入服務器socket)http://m.shnenglu.com/ziyebuboka/
   

//補充1:
缺點的確有,從架構上來說,層次互饒的確不好,但是具備了一定的好處,而且可以從設計模式的角度做好層次互分,我是這么認為的
1:首先 如果還是在網絡層一個線程對所有SOCKET做處理 再轉發至各個場景消息隊列 由各個場景的消息處理線程對其做處理,也的確可實現消息處理的多線程,但是不可避免的,在SOCKET對LINK的管理上任然會出現性能瓶頸,因為在進出口上只有一條路(如果進出口這里直接用多線程,則會出現無法知道與控制與為什么是這個線程管理這個Link 而另一個線程管理另幾個Link)
2:如果將LINK的管理層次上到場景級別,缺點是一定層度上與架構第二層次互饒,但是優點是對各個LINK的管理也不再是一條路了,由各個場景LINK管理線程對各個場景內的LINK做管理,也是多條路了,而后再發至各個場景消息隊列,又各個場景消息處理線程對消息做邏輯層次處理,可解決瓶頸
3:從模式角度來解決耦合度的問題,制造SceneLinkManager 掛接各個場景,制造各個SceneLinkManager線程,服務器啟動根據場景來生成,而SceneLogic與PlayerLogic仍在上一層次,消息進入隊列從Link找到Player,并且再制造每個場景的消息邏輯處理線程,消息隊列的邏輯處理只在這里面進行,因而我們仍然認為此Manager還是屬于網絡層次,對于上層邏輯無需關注SceneLinkManager的操作。  

//補充2:
@expter
你說的這個就是文里面一開始提到的主流線程的架構模式了。網絡層一個,邏輯層一個。安全性等等肯定都是可以做到非常好的,但是效率上肯定就差了,其實各個場景本來就是獨立,完全可以單獨開線程,這個文討論的就是如何用安全高效的方式來解決多線程
10:27 不知道 在回復中所提到的也是一種主流方式,在消息的邏輯處理模塊為各個場景單獨開線程,但是網絡層收發消息的處理上仍然還是一個,所以我這里提出的就是可以依據游戲服務器的特殊性,以場景為單位來管理本場景內的LINK,在網絡收發處為每個場景開線程來收發。
也有一種情況可以是直接在網絡層為link分組各個線程管理,比如預生成的1000個Link,0--499號Link是A線程管理,500--999是B線程管理,但是這樣會在消息同步等方面出現問題,比如A玩家和B玩家打架 A砍了B一刀,B砍了A一刀,這時候在先后順序上就有可能出現問題了,A的Link在A線程,B的Link在B線程,有可能是A的操作是先做,但是B線程先Tick了,導致B的砍一刀比A的砍一刀先處理了。。所以我這里提出是以場景為單位來管理Link 則這種問題就會避免了。。
我這里提出的模式就是網絡層以場景為單位線程管理本場景內LINK,而后是各個場景再來各個的邏輯處理線程處理各個場景的消息隊列        


         結束語,本文寫的不好,有不清楚的地方提出我再加。歡迎評論與討論,也希望能得到更好的方式。 http://m.shnenglu.com/ziyebuboka/
posted @ 2010-04-25 00:35 ziyebuboka 閱讀(2748) | 評論 (10)編輯 收藏

2010年1月4日

     摘要:   閱讀全文
posted @ 2010-01-04 00:35 ziyebuboka 閱讀(3452) | 評論 (14)編輯 收藏

2009年12月31日

     摘要:   閱讀全文
posted @ 2009-12-31 00:30 ziyebuboka 閱讀(2304) | 評論 (11)編輯 收藏

2009年12月30日

     摘要:   閱讀全文
posted @ 2009-12-30 02:05 ziyebuboka 閱讀(3006) | 評論 (9)編輯 收藏
  不是高手
   年底了,落寞,又一年,開博也是為了整理一下,拿筆不行,就打字了,等明年這時候再看看能到什么程度
  2012快到了,多搞搞吧
posted @ 2009-12-30 00:50 ziyebuboka 閱讀(332) | 評論 (0)編輯 收藏
僅列出標題  

導航

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

統計

常用鏈接

留言簿(2)

隨筆分類

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久久999| 欧美一区二区黄| 国产精品99久久久久久久vr| 一区二区三区在线免费观看| 国产精品一区视频| 国产日韩在线亚洲字幕中文| 国产欧美视频在线观看| 国产日韩精品在线观看| 亚洲精品一区二区三区不| 亚洲国产精品一区二区第一页| 久久一区亚洲| 欧美1区2区3区| 久久精品在线播放| 中日韩美女免费视频网址在线观看 | 99国产精品久久久久久久| 国产精品magnet| 亚洲国产精品日韩| 亚洲第一黄色网| 欧美精品在线观看一区二区| 亚洲精品一级| 欧美体内she精视频在线观看| 亚洲激情婷婷| 亚洲国产精品一区二区第四页av| 国产精品影院在线观看| 亚洲欧美日韩国产精品 | 国产亚洲亚洲| 中国成人亚色综合网站| 亚洲天堂视频在线观看| 亚洲第一中文字幕在线观看| 国产精品一区在线观看| 国产精品永久| 国产视频一区二区在线观看| 欧美日韩综合| 国产精品久久久久久久免费软件| 久久全球大尺度高清视频| 久久乐国产精品| 欧美一区二区三区在线| 亚洲一区二区视频在线| 国产日产亚洲精品| 国产婷婷色综合av蜜臀av| 国产乱肥老妇国产一区二| 国产精品激情av在线播放| 欧美午夜欧美| 国产一区欧美| 激情综合自拍| 好看的日韩视频| 一色屋精品亚洲香蕉网站| 在线观看日韩专区| 一区二区免费在线观看| 久久国产精品毛片| 欧美福利视频| 亚洲欧美一级二级三级| 男女精品视频| 国产精品久久久久久久电影 | 日韩视频中文字幕| 亚洲高清网站| 欧美精品激情blacked18| 亚洲区国产区| 国产精品99久久不卡二区| 国产婷婷97碰碰久久人人蜜臀| 久久躁日日躁aaaaxxxx| 欧美护士18xxxxhd| 欧美一级艳片视频免费观看| 久久精品一区二区国产| 夜夜狂射影院欧美极品| 午夜精品福利一区二区蜜股av| 极品少妇一区二区三区| 亚洲精品色图| 伊人狠狠色j香婷婷综合| 亚洲美女黄网| 日韩视频在线你懂得| 亚洲精品免费网站| 亚洲伊人第一页| 亚洲人成网站在线观看播放| 亚洲乱码一区二区| 在线播放亚洲| 亚洲欧美日韩国产中文在线| 一区二区日韩伦理片| 久久久久久久久伊人| 亚洲欧美日韩精品在线| 欧美日韩亚洲一区三区| 欧美国产一区在线| 国产精品日韩一区二区| 在线视频欧美精品| 亚洲欧美国产精品专区久久| 欧美大秀在线观看| 欧美激情乱人伦| 亚洲精品九九| 欧美日韩亚洲综合| 亚洲高清久久网| 亚洲三级视频在线观看| 久久久夜夜夜| 亚洲欧洲在线一区| 一本久久综合| 国产精品家庭影院| 亚洲午夜av电影| 欧美在现视频| 好吊日精品视频| 久久综合给合| 亚洲精品日产精品乱码不卡| 一片黄亚洲嫩模| 国产精品国产自产拍高清av| 亚洲欧美日韩精品综合在线观看| 欧美在线视频免费播放| 韩国av一区二区三区四区| 欧美www视频在线观看| 日韩一级黄色片| 欧美成人免费全部| 欧美色123| 亚洲一区二区在线看| 久久综合久久综合九色| 99亚洲伊人久久精品影院红桃| 国产精品一区一区三区| 欧美国产丝袜视频| 久久久www成人免费无遮挡大片| 亚洲美女黄色| 亚洲人成在线播放网站岛国| 久久裸体视频| 欧美在线观看一区二区| 一本久道综合久久精品| 亚洲激情成人| 亚洲激情中文1区| 国产无一区二区| 欧美日韩亚洲另类| 久久久久国产精品一区三寸| 亚洲午夜激情免费视频| 亚洲精品欧美日韩专区| 亚洲国产va精品久久久不卡综合| 欧美一区亚洲二区| 久久精品中文字幕一区二区三区| 午夜精品久久久久久久白皮肤 | 欧美在线一区二区三区| 亚洲国产日韩一区| 亚洲人屁股眼子交8| 亚洲国产91色在线| 亚洲人屁股眼子交8| 亚洲精品欧美激情| 亚洲天堂视频在线观看| 亚洲欧洲综合| 亚洲激情电影在线| 亚洲精品视频在线观看免费| 精品福利免费观看| 亚洲国产精品第一区二区| 国产有码一区二区| 悠悠资源网亚洲青| 亚洲国产一区二区三区在线播 | 欧美视频一区在线| 亚洲人成网站色ww在线| 亚洲人成网站影音先锋播放| 国内偷自视频区视频综合| 国产精品综合视频| 国外成人在线视频| 亚洲黄色影院| 亚洲欧美日韩一区二区在线| 久久国产免费看| 亚洲午夜激情网站| 久久不射2019中文字幕| 久久久久国产精品麻豆ai换脸| 巨乳诱惑日韩免费av| 日韩性生活视频| 久久天天躁狠狠躁夜夜爽蜜月| 欧美成人福利视频| 欧美男人的天堂| 国产区在线观看成人精品| 国产亚洲日本欧美韩国| 亚洲精品免费看| 欧美波霸影院| 亚洲午夜女主播在线直播| 欧美激情五月| 国产日韩在线一区| 亚洲一级一区| 欧美国产综合| 久久人人爽人人爽| 国产欧美精品一区| 这里只有精品视频| 亚洲免费视频中文字幕| 欧美成人一区二区在线| 亚洲永久免费精品| 国产精品永久免费在线| 一区二区三区在线看| 蜜臀久久久99精品久久久久久 | 亚洲人久久久| 欧美韩国在线| 欧美亚洲在线视频| 亚洲九九精品| 亚洲一区二区三区免费在线观看| 国产一区二区黄| 亚洲精品乱码视频| 国产精品国产a级| 久久国产精品电影| 看欧美日韩国产| 欧美在线短视频| 国产精品yjizz| 亚洲精品视频免费在线观看| 国产精品护士白丝一区av| 欧美激情国产日韩精品一区18| 国产欧美在线观看| 亚洲欧美怡红院| 久久久久久亚洲精品杨幂换脸| 国产主播在线一区|