qicosmos / rest_rpc

modern C++(C++11), simple, easy to use rpc framework
MIT License
1.66k stars 365 forks source link

rpc_server::publish只能传输字符串吗 #12

Open RubikZero opened 4 years ago

RubikZero commented 4 years ago

publish的data参数填写字符串就可以正常运行,填写int等c++数据类型编译就不通过,报错C2664无法将int转为string。

LeoYang-Chuese commented 3 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";
});
qicosmos commented 3 years ago

可以做,但是接口可能有点丑,可能要写成

client.subscribe<person>("key", [](person p) 
{
        std::cout << p.name << "\n";
});
LeoYang-Chuese commented 3 years ago

可以做,但是接口可能有点丑,可能要写成

client.subscribe<person>("key", [](person p) 
{
      std::cout << p.name << "\n";
});

这样的接口我认为可以接受。 另外发布订阅接口中有key和token,这两个都可以作为唯一标识,是否冗余,出于什么考虑保留两者?

qicosmos commented 3 years ago

是为了应对两个场景,一个参数的情况对应的是向所有订阅这个key的用户广播;两个参数(有token)对应的是向订阅某个key的某个专门的用户推送,这个token相当于这个用户独一无二的身份标识,应用场景相当于单播。

LeoYang-Chuese commented 3 years ago

谢谢,明白了,不少场景会用到两个参数。