设为首页 | 收藏本站 | 每日归档
当前位置:ucbug游戏网 > 新闻中心 > 游戏开发 >
网络游戏通讯模型初探(7)
作者:admin来源:未知发布时间:2009-10-09 15:56


  在通过WinSock 的recv() 函数获取网络数据之后,我们同样通过强行转换把获取出来的缓冲数据转换为相应结构体,这样就可以方便地对数据进行访问。(注:强行转换仅仅作为数据转换的一种手段,实际应用中有更多可选方式,这里只为简洁地说明逻辑)谈到此处,不得不提到服务器/ 客户端如何去筛选处理各种消息以及如何对通讯数据包进行管理。无论是服务器还是客户端,在收到网络消息的时候,通过上面的数据解析之后,还必须对消息类型进行一次筛选和派分,简单来说就是类似Windows 的消息循环,不同消息进行不同处理。这可以通过一个switch 语句(熟悉Windows 消息循环的朋友相信已经明白此意),基于消
息封包里的lType 信息,对消息进行区分处理,考虑如下代码片段:

switch( p->lType ) // 这里的p->lType为我们解析出来的消息类型标识
{
 case MSG_CHAT: // 聊天消息
  break;
 case MSG_MOVE: // 玩家移动消息
  break;
 case MSG_EXIT: // 玩家离开消息
  break;
 default:
  break;
}

  上面片段中的MSG_MOVE 和MSG_EXIT 都是我们虚拟的消息标识(一个真实ucbug游戏网中的标识可能会有上百个,这就需要考虑优化和优先消息处理问题)。此外,一个网络ucbug游戏网服务器面对的是成百上千的连接用户,我们还需要一些合理的数据组织管理方式来进行相关处理。普通的单体ucbug游戏网服务器,可能会因为当机或者用户过多而导致整个ucbug游戏网网络瘫痪,而这也就引入分组服务器机制,我们把服务器分开进行数据的分布式处理。

  我们把每个模块提取出来,做成专用的服务器系统,然后建立一个连接所有服务器的数据中心来进行数据交互,这里每个模块均与数据中心创建了连接,保证了每个模块的相关性,同时玩家转变为与当前提供服务的服务器进行连接通讯,这样就可以缓解单独一台服务器所承受的负担,把压力分散到多台服务器上,同时保证了数据的统一,而且就算某台服务器因为异常而当机也不会影响其他模块的ucbug游戏网玩家,从而提高了整体稳定性。

  分组式服务器缓解了服务器的压力,但也带来了服务器调度问题,分组式服务器需要对服务器跳转进行处理,就以一个玩家进行ucbug游戏网场景跳转作为讨论基础:假设有一玩家处于ucbug游戏网场景A,他想从场景A 跳转到场景B,在ucbug游戏网中,我们称之场景切换,这时玩家就会触发跳转需求,比如走到了场景中的切换点,这样服务器就把玩家数据从"ucbug游戏网场景A 服务器"删除,同时在"ucbug游戏网场景B 服务器"中把玩家建立起来。

  这里描述了场景切换的简单模型,当中处理还有很多步骤,不过通过这样的思考相信大家可以派生出很多应用技巧。不过需要注意的是,在场景切换或者说模块间切换的时候,需要切实考虑好数据的传输安全以及逻辑合理性,否则切换很可能会成为将来玩家复制物品的桥梁。


  总结

  本篇讲述的都是通过一些简单的过程来进行网络ucbug游戏网通讯,提供了一个制作的思路,虽然具体实现起来还有许多要做,但只要顺着这个思路去扩展、去完善,相信大家很快就能够编写出自己的网络通讯模块。由于时间仓促,本文在很多细节方面都有省略,文中若有错误之处也望大家见谅。

声明:本站所有资源均来自网络,版权归原公司及个人所有。如有版权问题,请及时与我们联系,我们在第一时间予以删除,谢谢!
ucbug游戏网
关于我们 | 下载帮助 | 广告&合作 | 下载声明 | 版权声明
Copyright © 2010-2016 ucbug.com. All Rights Reserved ucbug游戏网
皖ICP备15003425号 适度游戏娱乐,沉迷游戏伤身。