1、TCP连接
这里又说到了TCP连接,TCP连接的过程是我们所熟悉的三次握手,而TCP断开连接的过成功则是所谓的四次挥手,两个过程简单的示意图如下:
三次握手:
四次挥手:
很显然,连接和断开连接的过程是比较耗费资源的。因此在点对点通信中则出现了所谓的长连接。
2、长连接
长连接的在建立后,不会立即断开,何时断开可以由服务器选择,也可以由客户端来自行决定,这种连接比较适合点对点频繁地发送消息,可以避免频繁建立连接和断开连接所带来的开销。但是另一方面,需要有一定的策略来保证长连接“alive”。如果client在成功连接之后就崩溃,服务器没有感知到这种情况就会一直处于等待状态,这种情况如果发生的比较多的话,就会使得服务器端的压力比较大。所以需要制定一定的策略来探测这个连接是否存活。比较典型的做法是服务器端会定时发送一些探针信息,如果客户端对这些探针信息做出了响应,那么就说明这个连接时存在的,连接继续保持下去,直到收到断开连接的消息或者在发出探针信息后没有收到回应为止。
3、短连接
短连接应用比较典型的场景是http连接。服务器端不可能一直保持一个连接等待请求,因为服务器同时可能收到多个客户端的请求。所以在这种场景下是不适合用长连接,而短连接就比较适合用这种方式来,客户端请求拿到响应后立即释放资源。
4、长连接和短连接
总结而来,长连接和使用场景要视情况而定。
长连接:连接数不多且每个连接发送消息的次数比较多,这样维护连接的成本相对就比较低。
短连接:连接数很多且每个连接发送消息的次数比较少,这样就可以最大限度地减少服务器端的压力。
5、异步收发VS同步收发
异步收发:接收和发送是分开的,互不相干的。又分为异步双工(发送和接收在同一个程序中,但是在不同的子进程中)和异步单工(发送和接收不在同一个程序中)。
同步收发:在发送消息后等待接收响应,一般会设置超时时间,在这个超时时间内没有收到响应的情况下就会进行相应的处理。
6、Socket是什么?
参考:http://goodcandle.cnblogs.com/archive/2005/12/10/294652.aspx
感觉Socket就是把复杂的TCP/IP协议封装起来并且暴露一些接口来供开发人员所使用。是一个软件层面的概念。