首页 > 代码库 > C/S通信模型和相关技术要点

C/S通信模型和相关技术要点

    几乎所有的项目中,都会涉及到客户端和服务端。而客户端与服务器之间的通信又是一个很常见但又有需要问题的技术问题。

    首先,连接方式有长连接和短连接。先看看概念。

    长连接短连接只是一个概念性的问题,只要知道其概念,不是一个特殊的东西:
    长连接:系统通讯连接建立后就一直保持。
    短连接:只有系统需要相互发消息连接才建立(客户端发起),请求消息得到响应后连接关闭;
通讯实体间使用长连接,一般还需要定义心跳消息,定期发送来检测系统间链路是否异常,每隔一定时间发送一次心跳,如果一定次数没有收到心跳消息,这认为此连接出现问题,需要断开连接重新建立。
具体心跳消息的格式,以及发送间隔,以及多少次没有收到心跳就认为链路异常,以及数据部是否算作心跳消息(有的系统如果接收到数据包则会清除心跳计时器也就相当于系统中的数据包也算作心跳消息);这个需要两端进行协商。比如GSM常用的短消息中心和其他网络实体互连的SMPP协议,要求建立的就是长连接。

    很显然,长连接要复杂些。对于服务端,要对连接上来的客户端进行管理,还要检查心跳包。很多业务服务器都用的长连接,而接口服务器一般用短连接。

    其次,数据的同步和异步请求。

    在客户端请求到服务器后,客户端可以等待结果返回后,再处理其他的事情,也可以把请求放到队列,继续做其他的事情,有结果返回后,在做处理。这里就是同步和异步的问题。

一般来说,同步等待也是有个超时时间的,不能一直等待下去。而异步处理的话,都会有个消息队列和请求队列。当服务器的消息返回后,放到消息队列中,另外有一个线程来处理这个消息队列中的消息,以及和请求队列的数据做相应的处理。

    另外,就是阻塞和非阻塞。

    阻塞的结果就是这个线程将会等到这个结果返回,非阻塞就是只发送请求,不等待结果。

在很多时候,都会用异步和非阻塞,这样可以提高处理性能和资源的高效使用。

    最后,就是报文。数据报文是自己定义的。一般有2种:数据结构和xml数据。

这2种各有利弊。对于数据结构,程序内部处理比较容易,看在多版本兼容方面没那么好,比如结构增加了字段,低版本处理的时候,可能就有问题了。xml数据的兼容性比较好,你可以只关心自己想要的字段,而不用管那些不关心的字段,所以对版本的兼容也比较好。所以现在很多都采用xml数据。而对xml数据,现在用的比较多的就是json,并且C++、java、android等都支持。另外就是在传输的过程中加密。当然了,对于跨平台,还要考虑字节序的问题。

 

最后,在总结一下:

1 连接方式:长连接和短连接。

2 数据的同步和异步请求。

3 阻塞和非阻塞。

4 报文:协议,加密,字节序。

 

转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/38211079