tcp接口对接

2015-12-07

tcp接口对接

最近一直在跟着老大搞一些接口对接的事情。由于接口是tcp接口,所以用到大量的关于网络编程的知识,所以做一下简单的总结。

开始

首先,既然是接口对接,就必须先要连接上再说,只有连接上了,你才能干想要干的事情。

  1. 基本的tcp连接,知道对方的端口和地址,直接就能连接上。
  2. 连接验证,一般对方会需要你填写用户名密码之类的东西,所以这里经常出现问题,一般是如果验证不通过,对方不会回复任何消息。
  3. 验证连接,对看对方给的文档,多问问对方的开发人员,因为这个步骤通了,其他的步骤也就简单了。
  4. 加密验证,本次连接中,对方要求使用bluwfish加密算法做对称加密,但是blowfish加密的时候,需要自动补全字符,字符数量必须是8的整数倍,对方给的文档中没有提到, 他们使用什么补全,位置给了一个列子,例子中的东西也不能执行,于是只能猜,尝试无数结果,发现对方使用的ASCII的第一个字符0作为填充。这是一个不可见字符。
  5. 对方返回的数据是xml结构的,所以我们就必须将信息解密之后,再进行xml解析,得到想要的数据。
  6. xml解析,解析方法有多个库,不过由于数据量比较大,并且用户多了以后数据量上升就会是数量级的,所以必须有所取舍。
  7. 使用同步编程,简单的完成请求和对请求结果的处理。

这是一个最基本的过程,当这个过程完成之后,就开始实际业务的对接处理。

虽然是说是业务对接,其实是代码的第一次重构。首先确定重构的部分。

  1. 连接部分的重构,确保连接之后不中断,和中断之后自动重试连接。这部分代码定了之后,会很少改动的,因为它处于程序的底层。
  2. 数据发送和解析重构:
    1. 当然最初我们为了快速的验证接口的可用性,发送数据是一个恒定信息,面对业务时,我们需要根据具体的业务, 对发送的消息进行填充,简单来说,并且这样可以面对基本的业务需求。
    2. 返回数据的解析,因为返回数据的确定性和不确定性,导致如果没有一个好的通用处理,将会出现很多负面的影响, 比如再次迭代时带来的开发速度减慢。
  3. 使用编程技巧,将网络开发变成合理的现实生活模拟。

    1. 使用异步回调,将每一个来自前端api的请求进行回调注册,然后发送信息个tcp服务器,最终将得到的数据使用回调函数处理。
    2. tcp服务器可以被动的发送数据,同样可以主动的发送信息。被动信息使用回调处理,主动信息,直接处理,这些主动信息可能是一 些需要入库的数据或者是需要放入缓存的数据
    3. 将所有的模块根据项目的实际用途进行划分。

再次重构

重构对于后端工程师而言,是一个很大量的重构工作占据的整个项目开发的%80的时间,或许以前我很少这样认为。

但是这次我真真切切的感受到了

还是要感谢带我的老大,让我能每天打酱油一样的工作和不断的学习他的各种对于编程的哲学。