-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Pomelo 数据压缩协议
#Pomleo 数据压缩协议 在pomelo 0.3中,为了减少数据传输带宽,提高传输效率,我们支持了基于字典的route压缩和基于protobuf的传输数据压缩。 ##基于字典的route压缩 ###pomelo中的route pomelo中的route是用来确定消息的分发路径,将其交给相应的服务器和服务处理的。route分为两类,由客户端发给服务端消息时使用的route和服务端向客户端广播时使用的route。
-
前一种route是由服务器自动生成的,其中的字段就代表了对应的方法在服务端的位置。如“area.playerHandeler.attack”则表示在“area”服务器上的“playerHandler”接口中提供的“attack”方法。
-
后一种route是服务端想客户端推送消息时使用,如“onMove”,“onAttack”等,这些字段是由用户自己定义的,可以较方便的进行精简,只要修改客户端对应的映射就可以了。但是用户直接精简可能会导致route名与实际的语义脱离,如用“a”,“b”来表示上述的两种方法,从而降低代码的可读性,而且也会增加了路由冲突的可能性。 这个查询过程是通过字段名字直接进行的,因此除非修改目录和方法名称,否则无法进行精简。
在一般的web应用等带宽不敏感的环境中,route字段的开销是可以接受的。而在一些移动应用中,带宽~money的情况下,精简route字段就变得有必要了,而之前确实没有提供一个很好的解决方法。 Pomelo中实现了基于字典的route压缩,其基本的思路如下,对于客户端发给服务端的消息,如“area.playerHandler.attack"等,在系统启动时会进行扫描,并对每一个route生成一个唯一的字典项(16位的short int)。而对于服务端的广播消息,如“onMove”,“onAttack”,则需要用户提供一个自定义的route列表,pomelo会根据这一个列表对每个用户自定义的route生成一个字典项。 在开启字典功能并生成字典之后,在系统运行时,当发生消息交互时,如果改消息有对应的字典项,则在传输过程中会被pomelo自动替换为一个16位的short int,而在收到时会自动解包。这个过程对于用户而言是完全透明的,因此,在新版的pomelo内部,这个功能会是默认打开的。