guodongxiaren opened a new pull request #1529: URL: https://github.com/apache/incubator-brpc/pull/1529
当前brpc的实现中,如果http请求,uri没有设置全地址,比如"/get_result?a=b",那么会默认用ip+port作为HTTP 报头的header字段。 但是这样有问题,即使我的Channel初始化的时候使用的是域名,比如:http://www.foo.com,最后对对端看到的还是ip+端口。但像Apache/Nginx这种Web Server都是只是单地址多服务的,http://www.foo.com 和 www.bar.com 可能是同一个ip和端口(对应的是Apache的地址),然后Web Server会通过Host字段来路由到具体的服务。如果Apache看到的是Ip+端口,则不知道该把请求路由到哪个服务。 当前只能通过发送请求之时给uri填写完整的路径来解决,比如“http://www.foo.com/get_result?a=b”,但是感觉还是应该框架补全能力比较好。 因为比如我有多个环境,有测试、生产环境。他们访问下游HTTP服务的时候,每个环境的服务请求的接口地址是不同的。 比如生产环境是:“http://www.foo.com/get_result?a=b”,而测试环境是“http://www.foo-test.com/get_result?a=b”,我的服务在给Channel初始化的时候已经依据环境来用不同的域名地址进行了初始化。但是当实际给下游发请求的时候(CallMethod之前构造http_request的时候),还需要再判断一遍系统运行环境,再给cntl->http_request().uri() 视环境来赋不同的值。有些冗余,我感觉还是应该框架做好,减少冗余配置和冗余判断。 当然要实现这一feature,可实现的方案有很多。我这里采用的方案是也是当前感觉改动最小,影响最小但能达到目的的一个。受限于Brpc的历史设计,导致从URL解析出来的域名(或机器名,hostname)没有被存储。 因此我这里重新做了ParseUrl和hostname2ip的操作。虽然Init过程中其实之前就有间接调用到这两个函数,但是确实无法被Channel拿到结果。 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
