Hello!
2014/1/14 wb du:
> 基本的思路是:
> 1. 前端发起多频道订阅请求
> 2. lua循环完成订阅
[...]
> local channels = {}
> for i, channel in pairs(split(chns, ',')) do
> channels[i] = channel
> local result, err = red:subscribe(channel)
> end
你这里订阅多个频道的逻辑是错误的,难怪你会引入完全不必要的延时和超时错误。
根据 Redis 的官方手册,同时订阅多个频道是通过单个 subscribe 命令来实现的。比如同时订阅 foo 和 bar
这两个频道,应使用单个 subscribe 命令
red:subscribe('foo', 'bar')
如果你频道在一个 Lua table 里,则可以这么写:
red:subscribe(unpack(channels))
在你随后读取的各条消息中会由服务器标识当前消息属于哪一个频道。
更多细节请参见 Redis 官网上的 pubsub 文档:
http://redis.io/topics/pubsub
Best regards,
-agentzh