服务器结构探讨 -- 一点杂谈

原创 2007年09月13日 08:33:00

  再强调一下,服务器结构本无所谓好坏,只有是否适合自己。我们在前面探讨了一些在现在的游戏中见到过的结构,并尽我所知地分析了各自存在的一些问题和可以做的一些改进,希望其中没有谬误,如果能给大家也带来些启发那自然更好。

  突然发现自己一旦罗嗦起来还真是没完没了。接下来先说说我在开发中遇到过的一些困惑和一基础问题探讨吧,这些问题可能有人与我一样,也曾遇到过,或者正在被困扰中,而所要探讨的这些基础问题向来也是争论比较多的,我们也不评价其中的好与坏,只做简单的描述。

  首先是服务器操作系统,linux与windows之争随处可见,其实在大多数情况下这不是我们所能决定的,似乎各大公司也基本都有了自己的传统,如网易的freebsd,腾讯的linux等。如果真有权利去选择的话,选自己最熟悉的吧。

  决定了OS也就基本上确定了网络IO模型,windows上的IOCP和linux下的epool,或者直接使用现有的网络框架,如ACE和asio等,其他还有些商业的网络库在国内的使用好像没有见到,不符合中国国情嘛。:)

  然后是网络协议的选择,以前的选择大多倾向于UDP,为了可靠传输一般自己都会在上面实现一层封装,而现在更普通的是直接采用本身就很可靠的TCP,或者TCP与UDP的混用。早期选择UDP的主要原因还是带宽限制,现在宽带普通的情况下TCP比UDP多出来的一点点开销与开发的便利性相比已经不算什么了。当然,如果已有了成熟的可靠UDP库,那也可以继续使用着。

  还有消息包格式的定义,这个曾在云风的blog上展开过激烈的争论。消息包格式定义包括三段,包长、消息码和包体,争论的焦点在于应该是消息码在前还是包长在前,我们也把这个当作是信仰问题吧,有兴趣的去云风的blog上看看,论论。

  另外早期有些游戏的包格式定义是以特殊字符作分隔的,这样一个好处是其中某个包出现错误后我们的游戏还能继续。但实际上,我觉得这是完全没有必要的,真要出现这样的错误,直接断开这个客户端的连接可能更安全。而且,以特殊字符做分隔的消息包定义还加大了一点点网络数据量。

  最后是一个纯技术问题,有关socket连接数的最大限制。开始学习网络编程的时候我犯过这样的错误,以为port的定义为unsigned short,所以想当然的认为服务器的最大连接数为65535,这会是一个硬性的限制。而实际上,一个socket描述符在windows上的定义是unsigned int,因此要有限制那也是四十多亿,放心好了。

  在服务器上port是监听用的,想象这样一种情况,web server在80端口上监听,当一个连接到来时,系统会为这个连接分配一个socket句柄,同时与其在80端口上进行通讯;当另一个连接到来时,服务器仍然在80端口与之通信,只是分配的socket句柄不一样。这个socket句柄才是描述每个连接的唯一标识。按windows网络编程第二版上的说法,这个上限值配置影响。

  好了,废话说完了,下一篇,我们开始进入登录服的设计吧。 

c/c++性能优化--- cache优化的一点杂谈

之前写了一篇关于c/c++优化的一点建议,被各种拍砖和吐槽,有赞成的有反对的,还有中立的,网友对那篇博客的的评论和吐槽,我一个都没有删掉,包括一些具有攻击性的言论。笔者有幸阅读过IBM某个项目的框架代...

c/c++性能优化--- cache优化的一点杂谈

c/c++性能优化--- cache优化的一点杂谈 分类: 程序优化2013-07-01 12:53 1747人阅读 评论(8) 收藏 举报 Cache性能优化 之前写了一篇...
  • pi9nc
  • pi9nc
  • 2013年07月16日 13:42
  • 1316

以嵌套集合模型实现树状结构的一点深入探讨

以关系型数据库实现树状结构,除了大家熟悉和容易理解的“邻接表模型”,还有另一种“嵌套集合模型”,其基本理论在网上都可找到,比如: Mike Hillyer 的原作 http://mikehilly...
  • xfsnow
  • xfsnow
  • 2012年06月25日 21:39
  • 2774

c/c++性能优化--- cache优化的一点杂谈

转自:http://blog.csdn.net/wangjiaoyu250/article/details/9212863 之前写了一篇关于c/c++优化的一点建议,被各种拍砖和吐槽,有赞成...

python scrapy的一点杂谈

这几天为了做课程设计,想起之前学过python,所以想起要去做个爬虫,于是用上了scrapy框架,当然在这期间也了解了一下requests,但是还是没有scrapy方便,毕竟它没有处理cookie的机...
  • carioo
  • carioo
  • 2015年05月26日 09:23
  • 850

linux杂谈(十一):LDAP服务器的搭建

linux下的LDAP服务器搭建,从而完成服务器对外的用户共享!RHCA阶段配置。

游戏服务器日志杂谈

简介我们游戏服务器是使用异步请求的方式来执行玩家的每一项操作,现在的日志系统主要记录了服务器接受到的网络消息已经发出的网络消息,最近在修正bug时发现了现在log策略的一些缺陷,导致定位问题困难。返回...

系统优化、服务器优化杂谈

MySpace重写了六次,我建议大家都详细看这六次,为什么重构? 重构解决了什么问题? 之后又带来那些新问题? MySpace现在用的是100%的Microsoft .NET架构,数据库采用SQL ...

【杂谈】windwos IIS搭建ftp服务器

前言 一般而言,搭建服务器不会想到用windows去搭,因为linux服务器毕竟还是主流,而且具有性能上的优势。那么为什么会突然想到在windows搭建ftp服务器呢?其实,这个以前在中学时就接触到...

【Struct(结构体)杂谈之八】小个头也有大智慧---C语言Struct中的函数和函数指针

C语言Struct中的函数和函数指针 在第3回里的【Struct(结构体)杂谈之三】借我一双慧眼吧,让我把C++中Class(类)和Struct(结构体)看个清清楚楚明明白白...  文末留了一个悬...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:服务器结构探讨 -- 一点杂谈
举报原因:
原因补充:

(最多只允许输入30个字)