共计 1091 个字符,预计需要花费 3 分钟才能阅读完成。
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 的客户端。