游戏服务器开发技术选型

开发语言的选择


业界主要的是c/c++ + Python/lua模式做游戏服务器。c/c++做网络通讯数据传输,python/lua做业务逻辑。这样既保持了网络传输的效率(c++),又提升开发效率(Python/lua),同时也支持热更新。

当然,也有其他服务器开发语言,erlang(页游公司用的多),node.js(少量游戏用的,还有一个node.js写的引擎叫pemolo)

开源服务器引擎


1.firefly(9秒社团开发的一款python游戏服务器框架)

2.kbengine(作者说他按bigworld的架构来设计的,c++ + python的)

3.pomelo - 网易出品的Node.js游戏服务器框架

4.skynet - 云风出品Lua游戏服务器框架

数据库


现在比较流行的两种数据库,关系型数据库mysql,sql server和非关系型数据库redis。

服务端架构


 点这里

协议


客户端与服务器之间协议通信,可以用tcp或者http。主要看游戏模型,如果是那种弱联网单机玩法,用http足够了。

不过tcp用的比较还是比较多的。现在的网络游戏大多数都是tcp,像MMORPG类游戏。

udp:其实游戏是有udp的,在一些高效率的场景下比如pvp即时战斗,tcp的拥塞控制和超时重传并不适合,有些就用的udp,然后自己做丢包重发,拿网络公平性换游戏局部的效率。

在游戏服是单机玩法用http协议,战斗服需要长连接保存协议状态,用的tcp。

序列化


1.protobuf - 大家都知道的protobuf

2.Json - 这个算凑数吗?

3.MessagePack - It's like JSON. but fast and small.

网络


 libevent,boost.asio等网络库,网上有很多开源网络库,与其自己造轮子,不如就用开源网络库作为自己服务器的通讯库。最出名的就属libevent和boost.asio了。

Boost的ASIO是一个异步IO库,封装了对Socket的常用操作,简化了基于socket程序的开发。支持跨平台。

libevent是一个C语言写的事件驱动的开源网络库

zeromq:消息队列,一个稳健,简洁的多进程通讯方案的基础。ZeroMQ 并不是一个对socket的封装,不能用它去实现已有的网络协议。它有自己的模式,不同于更底层的点对点通讯模式。它有比 tcp 协议更高一级的协议。

其他


games github上的一个游戏列表

猜你喜欢

转载自www.cnblogs.com/losophy/p/9267711.html