短连接 :就像http那样服务端收到数据请求,处理之后,发送出去,然后就断开连接。(可以通过比较稳定的框架来做web service, 开发代价小,好维护)。
1>. 类似于单机游戏,因为交互性较差,但是又有不同,短连接导致的影响是服务器无法主动向客户端推送消息,玩家在线状态和其他在线玩家信息。短连接服务器可以在内存维护,通过心跳包来实现在线状态的判定,短链接针对的是玩家之间交互不是特别频繁,每个状态之间要求的实时性没有那么强的情况。
2>. 如果玩家前端触发一个行为,发送请求过来,后端验证,同时这个行为产生了其他的附加效果,比如成就可以领取,在长连接上,我就可以将附加效果的消息发送异步出去,各发各的,短连接必须将两条消息合并在一起发送;再比如,玩家抽奖获得了珍贵物品,要向全服在线玩家广播,短链接做不到;再比如,两个玩家进行自动战斗(就是俩玩家只能操控几个大招那种),后端计算每秒钟要向前端推送战报,短连接也是做不到的。
3>. 关于服务端向客户端推送消息,短连接是无法做到实时性很强的,有些消息推送其实可以缓存下来,等前端请求来的时候一并推送过去。
实时性很强的游戏,比如牵涉到战斗:
战斗类型一:是两个玩家对砍,这样的话每次攻击都会向后端发送请求,后端发送战报,如果使用短连接,这样就会因为频繁的遍历TCP连接和释放TCP连接造成效率低。
战斗类型二:俩玩家只能操控几个大招,其余自动战斗那种,大招有怒气值控制,怒气值到了就可以使用,这样自战斗开始到战斗结束,观看战斗的人,战斗双方,都需要获得战报推送,这就是短链接无法做到的了。
战斗类型三:上面提到的两种战斗都是真实玩家对砍的那种,如果是真实玩家(甚至这个也被限制为NPC类型,就是不能手控)和电脑控制的玩家(NPC或者限定为NPC的真实玩家),这样也是可以通过短链接进行战斗数据交互的(当然这样大部分情况战斗过程可以在前端计算,然后将战斗过程和战斗结果发给后端验证了)。
主要就是不涉及推送,所以可以使用短连接!比如刀塔传奇的战斗模式,比如我叫MT的战斗模式,比如辰东完美的战斗模式,都是可以用短链接做的,又如攻城掠地的战斗模式,部落觉醒的战斗模式以及各种真实玩家对抗的战斗模式,都需要推送战报比如世界聊天:消息推送需要长连接,比如活动领奖条件达成,以及成就达成,好友添加请求消息,需要推送,不过这些都是可以缓存起来用短链接来做也是可以的。比如帮派战:帮主发起战斗,成员获得通知,前往战斗,这个需要推送,就需要长连接。
长连接:就像tcp连接需要及时推送信息到客户端,对实时性要求很高。多用于操作频繁,点对点的通讯,而且连接数不能太多情况。(开发代价大,得自己搭建服务器框架)。
1>. 每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。如果不需要那么及时,可以采用http连接, 加上apns推送。
2>. 像WEB网站的http服务一般都用短连接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知。所以并发量大,但每个用户无需频繁操作情况下需用短连接会比较好。
总结:
总之,长连接和短连接的选择要视情况而定。http适合一部分游戏,典型的比如农场类,养成类,社交类这种弱交互的游戏。回合制的也可以采用http.不同的游戏对实时性的要求不同。所以如果你,需要及时推送信息到客户端,对实时性要求很高,那就只能用tcp连接。另外一般游戏的登录都是短连接而游戏进入之后会转为长连接进行交互。技术活用。(多处引用,作为记录学习,共勉!)