从用户输入url,或者是发送ajax请求,前面已经说了几个章节了,这一章,数据已经流转到服务端了。那么数据接受到数据前,需要做哪些准备呢?
1 服务端机器跟客户端一样吗?
服务端的机器,其实也是一台计算机呗,比如我们平时和服务端联调的时候,我们发现后端使用的电脑跟咱们前端的电脑都是一样的啊,都是公司给发的。但如果部署到机房以后呢?后端开发将代码部署到服务端机房后,那种大的扁平的例如IBM那种机器,除了内存更高,CPU核更多之外,如果说网络方面,网卡啦,协议栈啦,Socket库啦,跟客户端没啥区别。TCP和IP这些规格都是统一的。
但很明显,客户端负责发起连接操作,而服务端日常就是等待连接,连接后的一些操作,所以服务端和客户端这个Socket库的调用上,会有所不同。
2 服务端的程序和客户端程序都是 一 一对应的?
我们知道,客户端日常发送一个ajax请求,可能会有N个用户发送请求,甚至会同一时间发送,但服务端也许就那一台机器在等待连接,等待处理请求。所以每一个客户端的连接进入后,服务端就需要启动一个新的程序,这样才能确保和服务端一对一的交互,要不就乱套了。
服务器程序启动后运行等待连接模块,模块创建套接字,进入等待连接状态,当客户端发起连接请求后,这个模块接受连接,使用已连接的套接字与客户端进行通信。
3 套接字怎么理解?
网络连接中的套接字是在计算机网络中用于通信的一种抽象概念。它可以看作是两台计算机之间通信的端点,其中一个套接字位于发送数据的一端,另一个套接字位于接收数据的一端。
具体来说,套接字是网络通信的接口,它包含了通信所需的各种信息,如IP地址、端口号、协议等。当两台计算机之间建立网络连接时,它们之间会创建一个套接字对,其中一个套接字绑定了特定的IP地址和端口号,另一个套接字也绑定了相应的IP地址和端口号,这样就可以通过这对套接字进行数据的发送和接收。
套接字可以分为两种类型:流套接字和数据报套接字。流套接字提供了面向连接的、可靠的数据传输服务,如TCP协议;而数据报套接字则提供了无连接的、不可靠的数据传输服务,如UDP协议。
4 如何区分客户端与服务端
这看似显而易见,但你想,你既给了服务端数据,服务端也给了你数据,双方都具有收发的操作。也就是说,甚至你可以理解成用户这个客户端也是一个服务端,但这么理解显然又是不对的。
我们之前说过三次握手,网络通信连接,是需要一方发起,一方等待的状态下才可以完成的,而不是双方都主动发起。所以服务端具有等待连接的特性,而客户端更具有主动发起的特性,对吧,客户端一般情况下,是不能主动发起连接的,都是处于等待状态,等着我们去调用。
可能用下面这种描述更好理解网络连接的握手过程:
客户端收发数据:
- 创建套接字
- 用管道连接服务器端的套接字(连接阶段)
- 收发数据
- 断开管道并删除套接字
服务器收发数据:
- 创建套接字
- 将套接字设置为等待连接状态(等待连接)
- 接受连接
- 收发数据
- 断开管道并删除套接字
所以,理解网络连接,套接字很关键。