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

OldJiang.com

浩毛的博客

OldJiang.com
posts - 14, comments - 81, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

The Sun Game Server Architecture

     Sun‘s Game Server technology logically is divided vertically into 3 layers: Communications, Simulation Logic, and
Object Store.

     The Object Store layer contains the game states for all games running in the Game Server. It is a highly efficient(tenths of a millisecond per operation), scalable, and fault-tolerant transactional database layer that provides deadlock proof access to the simulation objects, which can either be locked (a write-lock) or peeked (a nonrepeatable read).

     The Simulation Logic layer is responsible for executing the actual game code. Here, tasks are created based on incoming events which, in turn, check objects out of the Object Store as needed. When a task is completed, the object is updated and returned to the Object Store.

     The Communications layer organizes player communication into channels of grouped communicators. It manages routing of data packets between the players and the Simulation Logic servers, and between the players themselves. It also is responsible for translation to and from other forms of networking (e.g., HTTP communications to and from cell phones).

posted @ 2010-06-08 14:28 浩毛 閱讀(1979) | 評論 (0)編輯 收藏

 

1、 游戲世界由很多個游戲對象組成(游戲角色、物品、NPC、技能等);

 

2、 一個游戲對象的有效數據主要存放在客戶端、游戲服務器和持久性數據庫中;

 

3、 游戲對象的處理可劃分為與位置有關的和與位置無關的,如公會處理、物品處理等主要行為可以看作是與位置無關的處理,而NPCAI)、戰斗、移動這類的主要行為可以看成是與位置有關的。

 

4、 從客戶端的角度來看,游戲行為可分為四類動作:

a)         來自服務器端的動作,如另外一個玩家跳起來。

b)        本地動作。僅僅發生在本地客戶端的動作,不需要與服務器端或其他客戶端通訊。

c)         先執行后驗證的可撤銷的動作。客戶端先執行,再提交服務器端驗證,驗證不成功通知客戶端將執行的動作撤銷。比如玩家控制的游戲角色執行移動處理。

d)        嚴格服務器端驗證的動作。客戶端執行動作前必須經過服務器端驗證后才能執行。如交易行為、攻擊其他玩家/NPC

 

5、 客戶端和服務器,服務器進程之間的相互的通信從邏輯上看就是就是向RemoteObject 發起的遠程過程調用(RPC),RPC主要有兩種類型:

a)         通知(Notify)。只通知對方,而不關心和需要對方返回結果。

b)        請求(Request)。向對方發起請求,對方處理請求后返回結果,發起請求和返回結果這個過程可以是同步或異步。游戲服務器中絕大部分RPC請求都是異步的。

 

6、 響應延遲主要是由于網絡帶寬和服務器處理效率引起的。應盡可能的通過一些技巧來隱藏和減少玩家的響應延遲。但不是所有的最新消息都能立刻發送出去(或接收處理到),因此,要在服務器端采用優先隊列來減少重要消息的響應時間。延遲也會由客戶端產生,如收到消息后的對消息的處理速度。

 

 

7、 服務器負載,除了升級硬件設備外,可以通過一些方式來提高服務器負載。

 

a)         保證足夠的網絡帶寬。

b)        分布式運算,合理的集群式架構。

c)         游戲策劃從游戲內容上避免設計高并發,高消耗的游戲行為。

 

 

 

8、 從服務器的可伸縮性,穩定性和高效率方面來考慮,要試著避免所有事情都在一個地方處理,盡量讓系統分布式運行,但是過多的劃分功能到不同的進程/機器上運行,又會帶來數據的大量同步的問題。因此可以將游戲對象的處理主要劃分為與位置無關和有關兩種。像公會,玩家信息,物品信息,組隊,拍賣等等這類與位置無關的但是占用CPU資源較少的處理可以盡可能的放在一個進程中,避免進程間對象同步,而像NPC,尋路,AOI運算,戰斗處理等與位置有關的,處理過程中特別關心對象坐標位置的、運算量特別大的,但是進程間對象同步較少的,都可以單獨劃分成多個進程。

 

每類進程服務的功能盡量單一。負責路由的就盡量只負責網絡包轉發,而不再承擔其他繁重的任務,負責游戲處理的就盡量讓網絡包流向簡單。

posted @ 2010-04-22 16:16 浩毛 閱讀(5637) | 評論 (6)編輯 收藏

     摘要:     上一篇內存池的實現其實更像一個后備列表的實現。使用上來說不是很方便,要申請的內存塊是一個BLOCK結構的一個個成員,而且每次從系統內存堆中申請都是一小塊一小塊,也沒有考慮字節對齊。因此讓我們來看看新的一個內存池的實現吧。    這個內存池是根據《c++應用程序性能優化》書里的固定尺寸的內存池原理做了一些改動用C語言寫的。大家有興趣...  閱讀全文

posted @ 2009-09-27 14:50 浩毛 閱讀(6410) | 評論 (5)編輯 收藏

     都知道頻繁分配內存釋放內存很耗系統資源,而且容易造成內存碎片。因此寫了個簡單的內存池實現,越簡單越好,為什么?做復雜了效率還不如直接malloc。因此這個內存池采用鏈表連接內存塊的方式,分配的是固定大小的內存塊,從池中取內存和歸還內存是用的空閑鏈表堆棧操作, 沒有使用線程鎖,如果要線程安全,建議在外部調用內存池的地方加鎖。

     做過一個簡單的測試,10萬次內存池調用的效率大概比直接分配釋放內存提高了30-50%。但是前提是內存池不能加鎖(pthread_mutex),加鎖的內存池效率和直接分配內存的效率差不多,有時候還要多點點。(測試的環境是每次2K,4個雙核CPU,FREEBSD7)

代碼實現:
struct memblock
{
   
int              used;
   
void*            data;
   
struct memblock* next;
   
struct memblock* createnext;
}
;


struct mempool
{
    
int            size;//memblock大小
    int            unused;//空閑的memblock大小
    int            datasize;//每次分配的數據大小(就是memblock.data)
    struct memblock*    free_linkhead;//空閑memblock鏈表頭
    struct memblock*    create_linkhead;//所有創建的memblock鏈表頭,內存池釋放的時候使用,防止內存池釋放的似乎還有memblock未歸還的情況
    
};
typedef 
void (*free_callback)(void*);//釋放回調函數,釋放membloc.data用,可以簡單的直接用free函數

void    mempool_init(int initialSize,int datasize);//初始化mempool
void    mempool_dealloc(struct mempool* pool,free_callback callback);//釋放mempool
void*    mempool_get(struct mempool* pool);//獲取一個memblock
void    mempool_release(struct mempool* pool,struct memblock* block);//歸還一個memblock

/*********************************
 * mempool
 * *****************************
*/
//malloc一個memblock
static struct memblock* mempool_allocblock( struct mempool* pool );

//------------------implement--------
void*
mempool_init( 
int initialSize, int datasize )
{
    
struct mempool* pool = malloc( sizeofstruct mempool ) );
    pool
->unused = 0;
    pool
->datasize = datasize;
    pool
->free_linkhead = NULL;
  
    
//預先初始化initialSize個內存塊
     pool->create_linkhead = NULL;
    
int i;
    
for ( i = 0; i < initialSize; i++ ) {
        
struct memblock* block = mempool_allocblock( pool );
        mempool_release( pool, block );
    }
    
return ( pool );
}

void
mempool_dealloc( 
struct mempool* pool, free_callback callback )
{
    
struct memblock* block = NULL;
    
//將所有創建的memblock釋放了
    while ( pool->create_linkhead != NULL ) {
        block 
= pool->create_linkhead;
        pool
->create_linkhead = pool->create_linkhead->createnext;
    
//執行free回調。
        if ( callback ) {
            ( 
*callback )( block->data );
        }
        free( block );
    }
    free( pool );
    L_DEBUG( 
"%s:size(%d),unused(%d)", __func__, pool->size, pool->unused );
}

static struct memblock*
mempool_allocblock( 
struct mempool* pool )
{
    
struct memblock* block = malloc( sizeofstruct memblock ) );
    block
->data = malloc( sizeof( pool->datasize ) );
    block
->next = NULL;
    block
->used = 1;//表示已使用

    
//加入所有創建的memblock的鏈表頭
    block->createnext = pool->create_linkhead;
    pool
->create_linkhead = block;

    pool
->size++;
    
return ( block );
}

void
mempool_release( 
struct mempool* pool, struct memblock* block )
{
    
if ( block == NULL ) {
        L_WARN( 
"%s:release a NULL!", __func__ );
        
return;
    }
    
if ( block->used != 1 ) {
        L_WARN( 
"%s:used!=1", __func__ );
        
return;
    }
    
//將歸還的內存塊放到空閑鏈表頭。
    block->used = 0;//表示空閑
    block->next = pool->free_linkhead;
    pool
->free_linkhead = block;
    pool
->unused++;//空閑數+1
}

void*
mempool_get( 
struct mempool* pool )
{
   
    
struct memblock* block = NULL;
    
if ( pool->free_linkhead ) {
    
//從空閑鏈表頭取出一個內存塊
        block = pool->free_linkhead;
        pool
->free_linkhead = pool->free_linkhead->next;
        block
->next = NULL;
        block
->used = 1;//表示已使用
        pool->unused--;//空閑內存塊數-1
    }
    
else {
    
//沒有空閑的內存塊,創建一個
        block = mempool_allocblock( pool );
    }
    
return ( block );
}

posted @ 2009-09-17 22:34 浩毛 閱讀(7635) | 評論 (18)編輯 收藏

僅列出標題
共2頁: 1 2 
OldJiang.com
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲欧美日本在线| 久久久久一区二区三区| 欧美视频一区二区三区在线观看 | 欧美精品久久久久久久久久| 亚洲成人在线网| 欧美本精品男人aⅴ天堂| 麻豆精品视频| 亚洲视频欧洲视频| 亚洲制服欧美中文字幕中文字幕| 国产精品人人爽人人做我的可爱 | 亚洲一区999| 亚洲女与黑人做爰| 精品成人在线视频| 亚洲欧洲在线免费| 欧美激情国产精品| 午夜精品一区二区三区在线视| 午夜精品福利在线| 亚洲黄网站黄| 亚洲图片在区色| 在线成人av| 一本综合久久| 亚洲国产福利在线| 亚洲视频播放| 亚洲国产成人tv| 亚洲午夜电影网| 在线日韩av| 亚洲一区二区三区高清不卡| 在线观看中文字幕不卡| 一区二区三区高清在线观看| 激情六月婷婷综合| 一区二区av在线| 亚洲国产精品一区制服丝袜| 亚洲一区二区成人| 91久久国产综合久久91精品网站| 制服丝袜激情欧洲亚洲| 亚洲人成啪啪网站| 欧美在线观看一区| 亚洲欧美日韩国产综合在线| 久久噜噜亚洲综合| 久久gogo国模啪啪人体图| 欧美好吊妞视频| 麻豆精品在线播放| 国产日本欧美一区二区三区| 亚洲精品乱码久久久久久久久| 国内外成人在线| 亚洲直播在线一区| 亚洲一区二区高清视频| 欧美成人一区二区在线| 久久综合九色综合欧美狠狠| 国产精品入口福利| 夜夜嗨av一区二区三区网站四季av | 亚洲美女在线观看| 亚洲国产精品传媒在线观看 | 亚洲欧洲日本国产| 亚洲第一中文字幕在线观看| 亚洲免费人成在线视频观看| 亚洲一区在线播放| 欧美日韩久久不卡| 亚洲美女精品久久| 日韩一级欧洲| 欧美日韩国产精品成人| 亚洲欧洲视频| 日韩视频亚洲视频| 欧美日韩美女在线观看| 亚洲精品国产品国语在线app| 最新亚洲激情| 欧美美女喷水视频| 日韩网站在线| 亚洲一级在线观看| 国产精品久久久久永久免费观看| 99热在这里有精品免费| 中文亚洲免费| 国产精品麻豆成人av电影艾秋| 一级日韩一区在线观看| 亚洲欧美日本另类| 国产欧美日韩综合| 久久精品在线免费观看| 欧美wwwwww| 日韩亚洲欧美一区| 国产精品乱码久久久久久| 亚洲综合色网站| 久久综合色天天久久综合图片| 国内视频一区| 欧美激情成人在线| 亚洲电影第三页| 久久视频精品在线| 亚洲经典视频在线观看| 亚洲国产精品一区二区久| 免费在线观看精品| 91久久国产综合久久| 亚洲先锋成人| 国产一区二区福利| 欧美激情在线免费观看| 亚洲精品免费一二三区| 性欧美videos另类喷潮| 国产日韩一区在线| 久久免费高清视频| 夜色激情一区二区| 久久久久久精| 999亚洲国产精| 国产一区二区三区观看| 欧美韩日视频| 午夜久久久久久| 亚洲欧洲综合另类在线| 午夜在线播放视频欧美| 亚洲国产老妈| 国产美女扒开尿口久久久| 美腿丝袜亚洲色图| 午夜久久美女| 亚洲毛片一区二区| 免费日韩一区二区| 中文日韩在线视频| 亚洲高清中文字幕| 国产一区二区三区高清| 欧美日韩精品一区二区| 久久久噜噜噜久久人人看| 在线视频免费在线观看一区二区| 久久综合中文字幕| 午夜精品久久久久久久| 9人人澡人人爽人人精品| 狠狠色狠狠色综合人人| 国产精品色网| 欧美日韩精品三区| 欧美高清在线视频| 久久久久久久综合日本| 国产精品99久久久久久白浆小说| 亚洲第一免费播放区| 久久久噜久噜久久综合| 欧美亚洲一区二区在线| 亚洲天天影视| 一本久道久久综合中文字幕 | 国产精品日本精品| 欧美剧在线观看| 欧美高清视频在线观看| 久久一日本道色综合久久| 欧美在线观看一区| 午夜精品福利一区二区蜜股av| 在线视频一区二区| 亚洲国产欧美日韩精品| 老司机午夜精品视频在线观看| 久久gogo国模裸体人体| 欧美一区二区视频97| 性做久久久久久| 香蕉久久一区二区不卡无毒影院| 亚洲自拍电影| 欧美亚洲一区在线| 久久精品国产2020观看福利| 欧美一级在线播放| 久久精彩视频| 快she精品国产999| 欧美大胆a视频| 欧美国产精品日韩| 亚洲人成亚洲人成在线观看| 亚洲精品久久久久久久久久久久久 | 国产夜色精品一区二区av| 国产欧美一区二区三区久久 | 亚洲精选久久| 一本色道久久综合亚洲精品不卡 | 国产精品99久久久久久久女警| 在线亚洲欧美视频| 亚洲欧美大片| 久久久91精品国产| 欧美国产日韩一区二区三区| 亚洲精品美女免费| 亚洲新中文字幕| 久久精品国产99国产精品| 久久在线免费视频| 欧美日韩国产成人在线| 国产毛片一区| 亚洲国产精品久久久久| 一个人看的www久久| 久久国产日韩欧美| 欧美激情在线有限公司| 一本色道久久综合亚洲91| 欧美在线看片| 欧美精品一区二区三区在线播放| 国产精品欧美激情| 亚洲高清免费| 亚洲在线观看免费视频| 麻豆91精品| 亚洲图片在线| 免费在线观看成人av| 国产欧美精品国产国产专区| 亚洲人成网站色ww在线 | 韩国一区电影| 一道本一区二区| 久久精品免费| 夜夜精品视频一区二区| 久久精品青青大伊人av| 欧美日韩一二三区| 在线观看视频日韩| 午夜久久黄色| 亚洲精品一二三区| 久久理论片午夜琪琪电影网| 国产精品黄视频| 99视频一区二区| 欧美二区在线观看| 欧美在线观看你懂的| 国产精品久久福利| 一本色道**综合亚洲精品蜜桃冫|