Erlang单服游戏开发记录3
前面分析的几种情况,归纳一下,其实就是一种,一个提供服务的gen_server,自身处理的时间本来在一个很低的范围内,但由于高并发带来的消息队列,造成处理的时间成几何级数增长,goolge了一下,没找到相关的内容,只能自己做一些细节上的努力。
1、gen_server中收到消息后,只进行必要的处理,将广播消息放入新进程中处理,虽然增加了整个游戏的进程数,但这也是erlang的推荐方式,但同时,只能用于一些不需要返回给调用者的处理。
2、同步改异步,既然同步调用会超时,那么改为异步请求,你处理好了再给我,这种方式缺点很明显,需要修改大量代码,也会把一些顺序逻辑变成触发式的逻辑,就算付出时间修改好了,也只是解决了调用者超时的问题,gen_server端的性能依旧。
3、动态扩展gen_server,通过判断gen_server的待处理消息长度,启动它的副本,将之后的消息转到新启动的gen_server进行处理。难点在于如何不修改原有代码的基础上,实现对一个gen_server的请求被转向到另一个,如果使用第三方gen_server来负责转发,如何避免它形成新的热点。