当前位置:首页 > Web开发 > 正文

如何理解php socket

2024-03-31 Web开发

  什么是socket?

  Socket 是在应用层和传输层之间的一个抽象层,它把 TCP/IP 层庞大的操纵抽象为几个简单的接口,提供用层挪用实现进程在网络中的通信。Socket 发源于 UNIX,在 UNIX 一切皆文件的思想下,进程间通信就被冠名为文件描述符(file descriptor),Socket 是一种“打开—读/写—封锁”模式的实现,处事器和客户端各自维护一个“文件”,在成立连接打开后,可以向文件写入内容供对方读取或者读取对方内容,通讯结束时封锁文件。

  如图为Socket地址位置:

技术图片

  Socket 通信过程

  Socket 保证了差别计算机之间的通信,也就是网络通信。对付网站,,通信模型是处事器与客户端之间的通信。两端都成立了一个 Socket 东西,然后通过 Socket 东西对数据进行传输。凡是处事器处于一个无限循环,期待客户真个连接。

  相关学习视频教程分享:php视频教程

  下图是面向连接的 TCP 时序图:

技术图片

  客户端过程:

  客户真个过程对照简单,创建 Socket,连接处事器,将 Socket 与长途主机连接(注意:只有 TCP 才有“连接”的观点,一些 Socket 好比 UDP、ICMP 和 ARP 没有“连接”的观点),发送数据,读取响应数据,直到数据交换完毕,封锁连接,结束 TCP 对话。

技术图片

  这里也可用 send() 要领:差别在于 sendall() 在返回前会测验考试发送所有数据,并且告成时返回 None,而 send()则返回发送的字节数量,掉败时都抛出异常。

  处事端过程:

  咱再来聊聊处事真个过程,处事端先初始化 Socket,成立流式套接字,与本机地点及端口进行绑定,然后通知 TCP,筹备好接收连接,挪用 accept() 梗阻,期待来自客户真个连接。如果这时客户端与处事器成立了连接,客户端发送数据请求,处事器接收请求并措置惩罚惩罚请求,然后把响应数据发送给客户端,客户端读取数据,直到数据交换完毕。最后封锁连接,交互结束。

技术图片

  挪用 accept() 时,Socket 会进入waiting状态。客户端请求连接时,要领成立连接并返回处事器。accept() 返回一个含有两个元素的元组 (conn, addr)。第一个元素 conn 是新的 Socket 东西,处事器必需通过它与客户端通信;第二个元素 addr 是客户真个 IP 地点及端口。data = conn.recv(1024)

  接下来是措置惩罚惩罚阶段,处事器和客户端通过 send() 和 recv() 通信(传输数据)。

  处事器挪用 send(),并给与字符串形式向客户端发送信息,send() 返回已发送的字符个数。

  处事器挪用 recv() 从客户端接收信息。挪用 recv() 时,处事器必需指定一个整数,它对应于可通过本次要领挪用来接收的最大数据量。recv() 在接收数据时会进入blocked状态,最后返回一个字符串,用它暗示收到的数据。如果发送的数据量赶过了 recv() 所允许的,数据会被截短。多余的数据将缓冲于接收端,以后挪用 recv() 时,会继续读残剩的字节,如果有多余的数据会从缓冲区删除(以及自上次挪用 recv() 以来,客户端可能发送的其它任何数据)。传输结束,处事器挪用 Socket 的 close() 封锁连接。

  从 TCP 连接的视角看 Socket 过程:

  TCP 三次握手的 Socket 过程:

技术图片

  1、处事器挪用 socket()、bind()、listen() 完成初始化后,挪用 accept() 梗阻期待;

  2、客户端 Socket 东西挪用 connect() 向处事器发送了一个 SYN 并梗阻;

  3、处事器完成了第一次握手,即发送 SYN 和 ACK 应答;

  4、客户端收随处事端发送的应答之后,从 connect() 返回,再发送一个 ACK 给处事器;

  5、处事器 Socket 东西接收客户端第三次握手 ACK 确认,此时处事端从 accept() 返回,成立连接。

  接下来就是两个真个连接东西互相收发数据。

  TCP 四次挥手的 Socket 过程:

技术图片

  1、某个应用进程挪用 close() 主动封锁,发送一个 FIN;

  2、另一端接收到 FIN 后被动执行封锁,并发送 ACK 确认;

  3、之后被动执行封锁的应用进程挪用 close() 封锁 Socket,并也发送一个 FIN;

  4、接收到这个 FIN 的一端向另一端 ACK 确认。

  总结:

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30313.html