游戏网关设计

最近关于网关的设计有不少思考,整理记录下一些想法。

负载均衡

  • 随机法,客户端随机选择一个,实现简单,分布可能不均,需要找个比较好的随机算法。
  • 随机法+询问机制,随机法的一个补充,当某个网关实例负载过重的时候,与客户端协调连接其他的实例。
  • id或ip静态划分 实现简单,问题同随机法,可能不均
  • 动态拉取 选择网关之前,先发起一个http请求负载最低的网关。
    以上的每种做法多多少少都会有一些变种和优化,可以结合具体项目综合考虑

协议选择

  • tcp 从头撸难度较大,而且可靠性和稳定性,对人员要求较高,幸运的是,目前业界一些高性能的库比较多,很少需要重复造轮子(修炼内功除外),对于非fps和moba这种对于网络比较敏感的游戏,大部分游戏都推荐使用
  • udp 性能好,但是无序且不可靠,需要实现可靠性和时序的保证
  • websocket h5游戏推荐使用

语言选择

  • c/c++ 门槛稍高,开发效率低,性能好
  • java 门槛低,轮子多,开发效率高,性能较c/c++ 稍差
  • go 门槛低,轮子少,开发效率高,性能好,GC较java还是有较大差距
  • erlang 语言小众,稳定性好,可以热更,

安全校验

  • ddos(flood,tcp 半连接等)
  • 重发
  • 篡改
  • 窃听

自定义协议设计

你可能感兴趣的:(游戏网关设计)