试试 route 压缩
在实际编程中,网络带宽的有效数据负载率是一个值得考虑的问题。对于移动客户端来说,网络资源往往不是很丰富,为了尽可能地节省网络资源,往往需要尽大可能地增加数据包的有效数据率。
以我们的聊天应用为例,当客户端发起聊天时,需要指定处理其请求的服务器的路由信息,示例如下:
pomelo.request('chat.chatHandler.send',
// ...
);
这个路由信息指出,处理这个请求的应该是 chat 服务器的 chatHandler 的 send 方法。当服务器给客户端推送消息的时候,同样也需要指明客户端的路由信息,在例子聊天应用中有 onAdd,onLeave 等。考虑当用户发起聊天的信息很短的时候,比如用户仅仅发了一个字,而我们在传输的时候一样要加上一个完整的路由信息,这样将造成实际传输中,有效数据率极低,网络资源被大量的额外信息浪费。最直接的想法就是缩短路由信息,对服务端的路由信息来说,由于当服务器确定后,其路由信息就确定了,对于客户端来说,虽然可以起很短的名字,但是很容易造成程序不可读。针对这种情况,pomelo 提供了基于字典的路由信息压缩。
- 对于服务端,pomelo 会扫描所有的 Handler 信息;
- 对于客户端,用户需要在 config/dictionary.json 中声明所有客户端使用的路由。
Chat 中使用
下面我们就将 route 压缩用到我们的 chat 示例中,具体的代码在分支 tutorial-dict 中,使用下面命令切换分支:$ git checkout tutorial-dict
首先看看客户端有哪些路由信息,我们把它放到 config/dictionary.json 里:
// dictionary.json
[
'onChat',
'onAdd',
'onLeave'
]
然后我们在 connector 配置选项里面增加 useDict 设置为 true。
app.configure('production|development','connector', function() {
app.set('connectorConfig', {
connector: pomelo.connectors.hybridconnector,
heartbeat: 3,
useDict: true // enable dict
});
});
app.configure('production|development','gate', function() {
app.set('connectorConfig', {
connector: pomelo.connectors.hybridconnector,
useDict: true // enable dict
});
});
好了,现在我们就已经开启了 pomelo 的路由压缩,现在的所有的数据包的路由信息都变成小整数了。对于 dictionary 中添加的客户端路由,会使用路由压缩。如果有客户端的推送路由没有加入到 dictionary 中,会怎么样呢?不用怕,对于在 dictionary 中找不到的路由信息,pomelo 还是会使用原来不压缩的路由。