1 什么是socket
Socket是对TCP/IP协定的封装,Socket自身并不是协定,而是一个调用接口(API),通过Socket,咱们能力应用TCP/IP协定.
2 socket是如何通信的
首先,有一个服务端和一个客户端。连贯过程分为三个步骤:服务器监听,客户端申请,连贯确认。
1。服务器监听:服务端先设置好本人的IP地址和端口号,进入阻塞状态。服务器端socket并不定位具体的客户端socket,而是处于期待连贯的状态,实时监控网络状态,期待客户端的连贯申请。
2。客户端申请:客户端的socket指出服务端的IP地址和端口号,向服务端socket收回连贯申请,把服务端从阻塞状态唤醒。
3。连贯确认:当服务器端socket监听到或者说接管到客户端socket的连贯申请时,就响应客户端socket的申请,建设一个新的线程,把服务器端socket的形容发给客户端,一旦客户端确认了此形容,单方就正式建设连贯。
具体步骤如下:
下图形容了客户端和服务端交互过程。
3 socket特点
3.1 socket是长连贯
HTTP也是用socket传输数据的。可是基于HTTP的连贯是短连贯,socket则不是,默认状况下,单方会始终保持联系。
短连贯:就是客户端申请一次后就被动会服务器断开连接。 连贯->传输数据->敞开连贯
长连贯:连贯->传输数据->放弃连贯 -> 传输数据-> 。。。 ->敞开连贯。
HTTP也能够建设长连贯的,应用Connection:keep-alive,HTTP 1.1默认进行长久连贯。
对于实时性要求高的场景,抉择长连贯。因为每次建设TCP连贯都要三次握手,这个须要工夫,如果每次都建设连贯会升高速度。
像web网站一样的http服务个别都用短连贯,这种服务的特点是,用户并发量大,可是每个用户无需频繁操作,应用短连贯就能满足要求,应用长连贯反而会耗费资源。
3.2 socket能够传输任何内容
socket传输的是字节流,而任何文件都能够作为字节流进行传送,不论是文本文件还是二进制文件,所以说socket能够传输任何内容。
当咱们做推送的时候,须要终端和服务器建设一条长连贯,以便服务器能够随时推送音讯,这时候联合3.1和3.2的特点,抉择socket是比拟适合的。
3.3 不仅能够和别的计算机通信,还能够作为不同过程通信的形式
socket不光能够链接两台不同的计算机,同一台计算机上的两个过程也能够通过socket找到对方而后进行通信。在个别的操作系统中,同一个计算机中的两个过程是互相隔离的,如果两个过程须要进行通信,则能够抉择一个作为socket的服务端,一个作为socket的客户端。