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