色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

coc的服務理念

方一強2年前14瀏覽0評論

coc的服務理念?

coc中的功能,大致分為以下幾個部分

1.登陸

2.部落相關功能

3.聊天(“世界"聊天,部落內部聊天)

4.郵件

5.搜索對戰玩家

6.排行榜

從需求上來出發,由于是全球同服,所以服務器端可以用傳統的社區類flash游戲架構,假設采用的是長連接(短連接思路架構大致相同)

1.登陸:

傳統滾服類游戲的登陸模式是,客戶端本地配置所有服務器的ip與port信息(或是從網關服務器獲取服務器信息),玩家選擇對應服務器,然后客戶端與之連接通信,每一個游戲服務器直連一個數據庫,

一個游戲服務器就是一個游戲的世界

社區類游戲的登陸模式是,客戶端通過hash算法得到其所在服務器id,然后去網關服務器中獲取對應游戲服務器信息,(假設我們后臺有n組游戲服務器分別用s0~s(n-1)來代替),

在與服務器通信時hash自己的用戶名(hash算法可以使用魔獸的hash算法),

獲得hash值,由于用戶名每個玩家總是不同,所以此hash值可以認為是全局唯一,可以當做玩家id,用得到的hash值除以n取余,再得到一個值v,這個值v就是此玩家所在服務器的編號,如hash后的

值為56547,游戲服務器有10組,依次編號為s1~s10,取余后得到7,那么此玩家就在s7服上,然后從客戶端本地讀出s7服的ip與port,與之連接,獲取玩家數據,連接后,玩家的數據更改也由此

服務器處理

架構如下

client

\

gate_server

/

---------------------------------------------------------

server1 server2 server3 .....

db1 db2 db3

2.部落相關功能

部落信息的存放與獲取與玩家信息類似,通過hash(部落名)%部落服務器數量,獲取部落所在部落服務器id,然后從此服務器獲取部落信息

3.聊天

“世界”聊天

coc中的世界聊天每個國家是不在一起的,并且一個國家中也分多組聊天服,有時有我和同事一起在世界中說話,但彼此互相無法看到,對于此種聊天的架構,可以有多種可能,具體視需求來定,

在這里假設是每個國家有多條聊天線路,不同聊天線路中的玩家互相不可見

原理同登陸流程,具體實現邏輯如下

1.聊天服務器在啟動時注冊自己(所在國家,服務器id)到網關服務器中

2.玩家在登陸時跟據其登陸ip獲取其所在國家,跟據其所在國家和用戶名去網關服務中獲取應該連接的聊天服務器

3.聊天網關服務器收到消息后hash用戶名,取余得到其對應的聊天服務器id,

4.把此聊天服務器的信息發送給客戶端

架構如下

client

\

gate_server

/

---------------------------------------------------------

chat_server1 chat_server2 chat_server3 .....

部落內部聊天

由于部落中玩家數量并不多,所以個人認為沒有必要再分離出單獨的部落聊天服務器,直接由部落服務器處理就可以了

1.客戶端把聊天內容發給其部落所在服務器,部落服務器收到后獲取其部落中所有玩家名,hash(名)%游戲服務器數量后獲取每個玩家所在服務器信息,然后向其發送聊天消息,由對應服務器再

向每個客戶端發送聊天信息

4.郵件

與玩家信息類似

5.搜索對戰玩家

游戲服務器中配置所有搜索服務器的ip與port信息,同樣hash取余后獲取每個玩家對應的搜索服務器id,與之連接,搜索流程如下

1.客戶端向游戲服中發搜索消息

2.游戲服向搜索服務器發搜索消息

3.搜索服務器收到消息后隨機一個游戲服務器向其發消息

4.游戲服務器收到消息后,隨機一個可攻擊的目標玩家,把玩家的名子返回給搜索服務器

5.搜索服務器把玩家名返回游戲服務器

6.游戲服務器hash(目標玩家名)取余后得到目標玩家所在服務器

7.游戲服務器向目標玩家所在服務器發消息獲取目標玩家信息

8.游戲服務器把目標玩家信息返回給客戶端

6.排行榜

關于排行榜的做法,可以參考云風在陌陌爭霸中的思路,地址:http://blog.codingnow.com/2014/03/mmzb_db_2.html

統上來看,最后服務器的架構是這樣子的

client1 client2 ...

\ /

gate_server...

chat_server1 chat_server2 ...

mail_server1 mail_server2 ...

clan_server1 clan_server2 ...

game_server1 ------- game_server2 ...

/ | \ / | \

db1 | rank_server | db2