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

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>
            国产精品xvideos88| 好看的日韩av电影| 亚洲视频一二三| 日韩视频在线一区二区三区| 欧美96在线丨欧| 99精品视频免费观看| 亚洲精品久久| 欧美日韩国产大片| 亚洲一区二区三| 亚洲欧美国产精品专区久久| 国产日韩精品综合网站| 久久久亚洲精品一区二区三区| 久久久精品动漫| 亚洲狼人精品一区二区三区| 亚洲精品影视| 国产区二精品视| 欧美成人精品福利| 欧美深夜影院| 久久精品91久久香蕉加勒比 | 99riav国产精品| 一区二区欧美国产| 伊人久久亚洲美女图片| 亚洲精品日韩久久| 国产午夜精品美女视频明星a级| 美日韩精品免费观看视频| 欧美黄色小视频| 久久精品国产一区二区电影| 欧美69wwwcom| 欧美在线视频一区二区| 欧美国产综合视频| 久久久夜精品| 欧美三级免费| 欧美高清视频免费观看| 国产精品色午夜在线观看| 欧美电影在线观看| 国产精品自拍网站| 亚洲欧洲日产国产综合网| 国产人久久人人人人爽| 日韩亚洲欧美在线观看| 精品不卡一区二区三区| 亚洲国产成人av| 亚洲天堂黄色| 99视频在线观看一区三区| 欧美一区=区| 亚洲一区三区在线观看| 久久天堂国产精品| 亚洲一区二区三区四区在线观看| 久久精品一区二区三区不卡牛牛 | 欧美色偷偷大香| 欧美承认网站| 激情综合色综合久久| 亚洲午夜精品一区二区三区他趣| 亚洲娇小video精品| 久久精品国产99国产精品澳门| 亚洲午夜影视影院在线观看| 欧美.日韩.国产.一区.二区| 久久免费精品日本久久中文字幕| 国产精品99一区| 亚洲毛片av在线| 日韩亚洲不卡在线| 欧美黑人国产人伦爽爽爽| 蘑菇福利视频一区播放| 精品成人一区二区| 久久国产精品久久w女人spa| 久久精品国产一区二区三| 国产精品亚洲аv天堂网| 在线视频日本亚洲性| 亚洲无限av看| 欧美四级伦理在线| 中文在线一区| 亚洲欧美日韩精品久久亚洲区| 国产精品国产三级国产aⅴ9色| 99国产精品久久久| 中文网丁香综合网| 国产精品v欧美精品v日本精品动漫| 亚洲国产一区二区三区青草影视 | 欧美日韩成人一区二区| 91久久极品少妇xxxxⅹ软件| 亚洲美女黄网| 欧美日韩在线视频首页| 亚洲午夜影视影院在线观看| 欧美一区二区免费| 精品二区久久| 欧美电影美腿模特1979在线看| 亚洲国产婷婷综合在线精品| 一区二区三区四区国产精品| 国产精品播放| 欧美在线视频日韩| 欧美成人免费在线视频| 亚洲视频网在线直播| 国产欧美不卡| 鲁大师影院一区二区三区| 亚洲国产精品电影| 亚洲欧美国产高清| 激情综合色丁香一区二区| 欧美黄色一级视频| 亚洲欧美偷拍卡通变态| 欧美xxxx在线观看| 亚洲午夜一区二区三区| 黄色精品一区二区| 欧美日韩国产色综合一二三四| 亚洲一区二区精品在线观看| 另类av一区二区| 亚洲伊人观看| 一区二区三区在线视频播放| 欧美日本国产| 久久9热精品视频| 日韩亚洲在线| 欧美aⅴ99久久黑人专区| 亚洲综合日韩在线| 亚洲精品久久嫩草网站秘色| 国产精品视频不卡| 欧美另类专区| 久久婷婷蜜乳一本欲蜜臀| 亚洲美女视频网| 欧美成年人视频网站欧美| 小黄鸭精品aⅴ导航网站入口| 亚洲电影免费| 国产欧美视频一区二区三区| 欧美激情综合在线| 久久蜜臀精品av| 午夜精品电影| 99re6热只有精品免费观看| 久久综合伊人| 久久大香伊蕉在人线观看热2| 亚洲欧洲一二三| 国内外成人在线视频| 国产精品免费网站在线观看| 欧美成人资源| 久久综合影音| 悠悠资源网久久精品| 欧美日韩国产成人高清视频| 鲁鲁狠狠狠7777一区二区| 欧美在线资源| 欧美一区二区三区免费视| 一区二区三区日韩| 亚洲视频第一页| 一区二区免费在线观看| 99国产精品| 最新国产成人av网站网址麻豆| 久久夜色精品国产噜噜av| 欧美一区二区三区日韩| 欧美一级专区免费大片| 亚洲一区在线直播| 亚洲女同精品视频| 亚洲在线免费观看| 亚洲自拍偷拍网址| 午夜精品久久久久久99热| 亚洲自拍都市欧美小说| 亚洲在线网站| 午夜精品美女自拍福到在线| 亚洲欧美日韩综合aⅴ视频| 亚洲天堂av电影| 午夜精品久久久久久久99热浪潮| 亚洲小说春色综合另类电影| 亚洲永久精品国产| 亚洲欧美视频在线观看| 欧美在线视屏| 久久最新视频| 亚洲国产美国国产综合一区二区| 亚洲第一久久影院| 亚洲老板91色精品久久| 9久草视频在线视频精品| 亚洲一区精品视频| 久久狠狠久久综合桃花| 美女在线一区二区| 欧美日韩国产限制| 国产欧美亚洲一区| 亚洲第一中文字幕在线观看| 亚洲精品视频免费| 亚欧成人在线| 久久综合五月天婷婷伊人| 亚洲国产成人av| 亚洲午夜精品网| 久久久激情视频| 欧美日韩国产综合新一区| 国产精品女人久久久久久| 一区免费观看| 亚洲欧美成人| 久久综合久久综合久久| 最新国产成人在线观看| 亚洲欧美国产不卡| 欧美成年人视频网站| 国产精品裸体一区二区三区| 一色屋精品视频免费看| 9久re热视频在线精品| 欧美在线一级va免费观看| 亚洲精华国产欧美| 欧美在线观看视频一区二区三区| 在线亚洲自拍| 欧美 日韩 国产在线| 亚洲一区二区三区四区五区黄| 久久久久久成人| 国产精品中文字幕在线观看| 亚洲福利视频免费观看| 欧美影视一区| 一区二区久久久久久| 欧美freesex交免费视频| 国产亚洲欧美中文| 亚洲综合第一页|