新产品开发了近2-3个月,给到客户做试用的时候,发现一个开发这么久从未考虑到的一个通信问题,mark下,下次开发同类产品的时候长点记性了.
产品由client与服务端两部分组成,client与服务端须要相互通信,协议採用http,两边各开一个port,用于http请求响应.因为开发的时候都在同一个网段进行測试,所以没有发现不论什么产品上的问题.到了客户那边才发现客户环境是部署在不同网段的,这就带来了一系列port映射的问题.
所谓port映射能够理解为路由地址转换(nat),网段A的机子要訪问网段B的机子,中间必需要有个路由装置C(路由器,linuxserver等),C将A机子发给B机子包的源地址和源port替换成自己的地址和port,然后由C跟B通信,B响应请求给C,C又将响应内容还给A. 这就达到了不同网段之间A,B之间的通信.
刚接触到这个问题的时候,心想这也不是产品上的问题,就让客户自己加入port映射呗,由于不同网段避免不了的呀. 客户的反馈是 client向服务端的port影射他们能够自己负责配置,可是服务端向client的映射不给配, 一是太麻烦,二是client不让开port通信. 客户就是上帝,既然这么要求了,我们也没用办法仅仅有改通信方式.之前是client与服务端双向通信,所以跨网段就须要两边都配置port映射. 更改之后就变成单向通信,client仅仅能向服务端发请求并接受服务端响应,服务端不能向client发请求.服务端假设要获取到client的信息,仅仅能通过client不停轮询的向服务端去提供信息.这样就能够保证仅仅有client须要配置port映射,服务端不须要.
总结一下, http双向通信在同一网段内基本没有什么问题,可是在不同网段port映射须要配置两遍比較麻烦(前提是客户介意),採用单向轮询port映射配置会相对轻松点.