从事游戏开发已经有几年了,虽然平时的工作以编写游戏逻辑为主,但是工作之余也看过不少关于网游服务器的文章和源码。一直没空整理出自己的想法。刚好最近开始接触公司的服务器引擎,使用过程中有很多不习惯的地方,所以,我打算借此机会,梳理下我的做法。如何编写一个网游服务器。
说明:这里的从零开始,并不是说什么都是自己从零编写,比如网络库。我的原则是,如果有稳定可靠的第三方库可用,坚决不重复造轮子。
网游服务器是一个典型的CS架构。服务器主要的功能如下:
1、维护客户端链接,接收客户端请求,发送服务器反馈给客户端等
2、为游戏提供数据存储服务
3、处理游戏业务逻辑,实现一些基础管理如玩家管理,副本管理等,以及一些高级玩法,如工会、家族等
所以,服务器需要些什么?
1、网络层。
无论你采用最原始的socket阻塞调用,还是epoll、iocp等技术,服务器对于网络,关注点一直集中在3个方面:
a)有新的链接加入/链接断开
b)读数据
c)写数据
这里不讨论该用什么样的网络技术来提高效率。因为我对网络编程也知之甚少。但是对于一个网络库,只要在这3个事件发生的时候能通知到游戏服务器,无论是事件通知还是函数回调,都能满足服务器的需求。而网络库的效率,则取决于他的是实现方式。
如果是端游,支持TCP即可。如果是手游或者页游,可能还要支持websocket、socketio、http等。
为了方便开发和测试,这个网络库最好还是能在linux和windows上运行。我们一般的习惯是windows上开发测试,linux下部署发布。当然了,也有的公司直接在windows下部署发布。
2、数据库支持。
网游对于数据库的利用率其实并不高。很多公司项目,只是把数据库当成了一个块存储模块,比如数据库表只有2列,一列是ID主键,一列就是block数据。
这样的数据库存储方式,感觉和文件没什么区别。对开发人员的要求也降低了很多。你可以采用mysql或者mangodb,反正怎么方便怎么用。即不需要编写存储过程,也不需要什么触发器、事务等数据库技术。
3、脚本支持。
游戏的逻辑是整个服务器中最麻烦的地方。策划对需求的改动频繁,
说明:这里的从零开始,并不是说什么都是自己从零编写,比如网络库。我的原则是,如果有稳定可靠的第三方库可用,坚决不重复造轮子。
网游服务器是一个典型的CS架构。服务器主要的功能如下:
1、维护客户端链接,接收客户端请求,发送服务器反馈给客户端等
2、为游戏提供数据存储服务
3、处理游戏业务逻辑,实现一些基础管理如玩家管理,副本管理等,以及一些高级玩法,如工会、家族等
所以,服务器需要些什么?
1、网络层。
无论你采用最原始的socket阻塞调用,还是epoll、iocp等技术,服务器对于网络,关注点一直集中在3个方面:
a)有新的链接加入/链接断开
b)读数据
c)写数据
这里不讨论该用什么样的网络技术来提高效率。因为我对网络编程也知之甚少。但是对于一个网络库,只要在这3个事件发生的时候能通知到游戏服务器,无论是事件通知还是函数回调,都能满足服务器的需求。而网络库的效率,则取决于他的是实现方式。
如果是端游,支持TCP即可。如果是手游或者页游,可能还要支持websocket、socketio、http等。
为了方便开发和测试,这个网络库最好还是能在linux和windows上运行。我们一般的习惯是windows上开发测试,linux下部署发布。当然了,也有的公司直接在windows下部署发布。
2、数据库支持。
网游对于数据库的利用率其实并不高。很多公司项目,只是把数据库当成了一个块存储模块,比如数据库表只有2列,一列是ID主键,一列就是block数据。
这样的数据库存储方式,感觉和文件没什么区别。对开发人员的要求也降低了很多。你可以采用mysql或者mangodb,反正怎么方便怎么用。即不需要编写存储过程,也不需要什么触发器、事务等数据库技术。
3、脚本支持。
游戏的逻辑是整个服务器中最麻烦的地方。策划对需求的改动频繁,