zoukankan      html  css  js  c++  java
  • 游戏服务器开发技术选型

    服务器引擎


    这里

    数据库(缓存)


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

    memcached曾经的优势是可以集群,但是现在redis也可以了。

    redis支持更多数据结构,支持数据持久化。所以redis可以看做memcached的超集。

    redis最强大的特性是zset,redis有hash,但是只有一层深度,mongodb是有理论上无限深度的hash

    mongodb是真正的数据库,而不是缓存数据库,他的竞争对手应该是mysql等rdb数据库

    实际应用中,我认为最佳搭配是mysql + redis,操作都很方便,兼顾速度和容量

    服务端架构


     点这里

    内存


    https://github.com/cloudwu/skynet/wiki/MemoryHook

    网络协议


    客户端与服务器之间协议通信,可以用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.

    http://blog.51cto.com/yaocoder/995210

    I/O frameworks


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

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

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

    集群


    RPC底层模式

    基于基于zeromq(rabbitmq)的跨进程通信

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

    actor模式

    参考skynet集群

    单元测试


     http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html

    日志


     spdlog

     log4cxx

    其他


    games github上的一个游戏列表

    高性能分布式游戏服务器框架

    List of game engines

  • 相关阅读:
    Best code水题之路
    我的CodeF水A题之路
    studing(来自转载)
    BFS
    fibonacci数列(五种)
    Redis阻塞队列原理学习
    the enum hack
    Divide Two Integers
    Surrounded Regions
    Search in Rotated Sorted Array
  • 原文地址:https://www.cnblogs.com/losophy/p/9267711.html
Copyright © 2011-2022 走看看