当前位置:首页 > 知识百科 > 家政公司

coc的服务理念?

2024-09-22 05:28:46     来源:www.dxfbaby.com
分享:
收藏本文          热度:
导语:coc中的功能,大致分为以下几个部分1.登陆2.部落相关功能3.聊天(“世界"聊天,部落内部聊天)4.邮件5.搜索对战玩家6.排行榜从需求上来出发,由于是全球同服,所以服务器端可以用传

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