Open RubikZero opened 4 years ago
同问! 现在发布订阅接口中的订阅方式如下:
client.subscribe("key", [](string_view data) {
msgpack_codec codec;
person p = codec.unpack<person>(data.data(), data.size());
std::cout << p.name << "\n";
});
能否提供以下接口呢,免去了使用者的序列化和反序列化工作。
client.subscribe("key", [](person p)
{
std::cout << p.name << "\n";
});
可以做,但是接口可能有点丑,可能要写成
client.subscribe<person>("key", [](person p)
{
std::cout << p.name << "\n";
});
可以做,但是接口可能有点丑,可能要写成
client.subscribe<person>("key", [](person p) { std::cout << p.name << "\n"; });
这样的接口我认为可以接受。 另外发布订阅接口中有key和token,这两个都可以作为唯一标识,是否冗余,出于什么考虑保留两者?
是为了应对两个场景,一个参数的情况对应的是向所有订阅这个key的用户广播;两个参数(有token)对应的是向订阅某个key的某个专门的用户推送,这个token相当于这个用户独一无二的身份标识,应用场景相当于单播。
谢谢,明白了,不少场景会用到两个参数。
publish的data参数填写字符串就可以正常运行,填写int等c++数据类型编译就不通过,报错C2664无法将int转为string。