龙空技术网

初识Socket编程接口

字母侠 1646

前言:

今天咱们对“javascript socket编程”可能比较珍视,姐妹们都需要分析一些“javascript socket编程”的相关资讯。那么小编同时在网摘上搜集了一些对于“javascript socket编程””的相关内容,希望你们能喜欢,我们快快来了解一下吧!

socket这个概念,如果你学习过TCP/IP网络模型(或网络七层协议),你就会很清楚我们通常在开发中讲的端口是怎么一回事。

网络上任意两个要建立通信的程序都至少需要一对端口,端口就是所谓的socket。端口只有在本地才有意义,就是说,在本地这个端口是唯一的。通信的任意一端就是一个socket。socket本质是对TCP/IP的封装,TCP/IP提供了可供程序员做网络开发所用的接口,即Socket编程接口。

有没有想过端口号只能是0至65535?这是因为传输层的协议:TCP、UDP等,它们的报头端口号长度是16bit所决定的。本地操作系统会给那些有需要的进程分配协议端口,即我们常说的端口。每个协议端口由一个正整数标识,如80,8080,21等等,端口对应一块内存缓冲区。当目的主机接收到数据包后,将根据报文首部的目的端口号,把数据发送到相应端口。而与此端口相对应的那个进程将会到相应缓冲区领取数据并等待下一组数据的到来。不只接收数据包的进程需要开启端口,发送数据包的进程也需要开启端口,这样,数据包中将会标识有源端口,以便接收回传到这个端口的数据包。想了解更多,我建议学习一下TCP/IP网络模型,这里跳过不谈。

这里引用百科的一段话,加深大家对socket的理解:

Socket的英文原义是“孔”或“插座”。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现设备上的程序之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供多种服务。每种服务都绑定到一个端口上,即打开一个Socket,不同的端口对应不同的服务。Socket正如其英文原义那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。

百科上这段话,相信让大家更好地理解了socket。平时,程序员嘴里常说TCP/IP,通常是指TCP、IP这两种协议,因为开发中与这种两种协议打交道的时间占比很大,另一种是指TCP/IP模型,详情请自行脑补。Socket在通信前要先建立连接,即TCP的“三次握手”。我们现在来了解一下socket之间的连接过程,分三步:

第一步:服务器监听,因为服务器并不知道具体的客户端socket,所以等待客户端的socket来主动连接,实时监控着。

第二步:客户端发起连接。对于客户端来说,服务端socket是固定的,所以服务器的IP和端口都要固定。客户端socket先描述服务端的socket,就是指出要连接的服务器的IP地址及端口号,然后向服务端发起连接请求。

第三步:连接确认。这要经过TCP的”三次握手“才能建立连接。具体过程:当服务器端socket接收到(监听到)客户端socket的连接请求,它就响应客户端套接字的请求,建立一个新的线程,并把服务器端socket的描述发给客户端,一旦客户端确认了此描述,连接就建立好了,这个过程其实就是TCP连接的建立过程。而服务器端socket继续处于监听状态,继续接收其他客户端套接字的连接请求。

建立好连接后,就可以进行通信了。

Socket搭建推荐:

操作系统:ubuntu或其他linux

服务端:Socket.io server(Node.js实现)+Nginx(用左负载均衡)+redis(提高访问速度)

客户端:Socket.io(java、web、android、iso都有相应的版本)

标签: #javascript socket编程