Tencent / flare

Flare是广泛投产于腾讯广告后台的现代化C++开发框架,包含了基础库、RPC、各种客户端等。主要特点为易用性强、长尾延迟低。
Other
1.33k stars 200 forks source link

使用`getaddrinfo`会不会更好一点 #99

Closed 4kangjc closed 1 year ago

4kangjc commented 1 year ago

https://github.com/Tencent/flare/blob/bb5cd22e54f40f7bc228c294d89bdab55966ee48/flare/rpc/name_resolver/util/domain_name_resolver.cc#L45-L58

4kangjc commented 1 year ago

直接在Endpoint那里加一个EndpointFromDomain吧

0x804d8000 commented 1 year ago

getaddrinfo确实更好,gethostbyname被deprecate了

但是EndpointFromDomain有点奇怪,from ipv4/6这些都是工厂方法,而这个domain实际上是在做解析,可能失败可能返回多个,跟工厂性质已经不一样了。

optional<vector<Endpoint>> ResolveDomainName(string_view)之类的可能比较合适。另外service参数感觉没啥必要,一方面现在很少有人用https之类的写法指定端口号,另一方面真的指定端口号的时候,这个service参数反而很难传。(另外就这个函数名来说的话,Domain name因为不涉及到端口,所以也不太适合有这个参数)

4kangjc commented 1 year ago

嗯好,error code要返回吗

4kangjc commented 1 year ago

嗯好,error code要返回吗

std::variant<std::vecotr<Endpoint>, int>

4kangjc commented 1 year ago

getaddrinfo确实更好,gethostbyname被deprecate了

但是EndpointFromDomain有点奇怪,from ipv4/6这些都是工厂方法,而这个domain实际上是在做解析,可能失败可能返回多个,跟工厂性质已经不一样了。

optional<vector<Endpoint>> ResolveDomainName(string_view)之类的可能比较合适。另外service参数感觉没啥必要,一方面现在很少有人用https之类的写法指定端口号,另一方面真的指定端口号的时候,这个service参数反而很难传。(另外就这个函数名来说的话,Domain name因为不涉及到端口,所以也不太适合有这个参数)

service还可以传"80", "12345"的端口字符串

0x804d8000 commented 1 year ago

那用Expected<vector<…>, int>好了

service那个一方面跟这个函数名不怎么搭(domain name的话不涉及port),一方面真用端口的话没有背景知识的人(用户一般不会关注底层实现)也不理解为什么类型不是int。

不过想了下,因为Endpoint不能手动改端口号,不允许指定端口号确实有点难用,那参数里加上int result_port=0