本文实例讲述了nodejs实现套接字服务功能。分享给大家供大家参考,具体如下:
一、什么是套接字
1. 套接字允许一个进程他通过一个IP地址和端口与另一个进程通信,当你实现对运行在同一台服务器上的两个不同进程的进程间通信或访问一个完全不同的服务器上运行的服务时,套接字很有用。node提供的net模块,允许你既创建套接字服务器又创建可以连接到套接字服务器的客户端。
2. 套接字位于HTTP层下面并提供服务器之间的点对点通信。套接字使用套接字地址来工作,这是IP地址和端口的组合。在套接字连接中,有两种类型的点:一类是服务器,它监听连接;一类是客户端,它打开一个到服务器的连接。服务器和客户端都需要一个唯一的IP地址和端口的组合。
3. 套接字是HTTP模块的底层结构,如果你不需要处理如get何post的web请求,只需要点对点的传输数据,那么使用套接字就可以就能为你提供一个轻量级的解决方案和更多的控制。
二、net.Socket对象
1. Socket对象同时在套接字服务器和客户端套接字上创建,并允许数据在它们之间来回写入和读取。在套接字客户端,当你调用net.connect()
或net.createConnection()
时,Socket对象在内部创建,这个对象是为了表示到服务器的套接字连接。使用Socket对象来监控连接,将数据发送到服务器并处理来自服务器的响应。在套接字服务器上,当客户端连接到服务器时,Socket对象被创建,并被传递到连接事件处理程序,这个对象是为了表示对客户端的套接字连接。 在NodeJS中有三种socket:
,UDP
,Unix域套接字,主要介绍NodeJS中TCP的基本编程知识。2. 创建一个Socket对象,可以使用以下方法:
无论你使用哪种,都将返回一个Socket对象,唯一的区别在于接受的第一个参数,而最后一个参数都是当连接对服务器打开时执行的回调函数。而无论你使用net.connect
还是net.createConncetion
,它们的工作方式是完全相同的。
那么至于第一个参数,指定的选项为:
套接字的另一端发送一个FIN数据包时,该套接字将不会自动发送一个FIN数据包,从而使Duplex流的一半保持开放。默认为false
3. 一旦Socket对象被创建,它就提供了在连接到服务器的生命周期中发出的几个事件,如下:
函数不接受任何参数 套接字上收到数据时发出。如果没有数据时间处理程序被连接,那么数据可能会丢失。回调函数必须接受一个buffer对象作为参数,它包含从套接字读取的数据的块。 函数不接受任何参数 套接字中的数据流。回调函数不接受任何参数 套接字连接上发生错误时发出。回调函数应该接受错误的唯一参数。 套接字已完全关闭时发出,它可能是由一个end()方法关闭的,或者因为发生错误而关闭。回调函数不接受任何参数
4. Socket对象还提供了可以访问以获得该对象的信息的几个属性:
套接字的流中的字节数 套接字连接到的远程服务器的IP地址 套接字连接到的远程服务器的端口 套接字连接的本地IP地址 套接字连接的本地端口 套接字读取的字节数 套接字写入的字节数
三、net.Server对象
可以使用net.Server对象创建一个TCP套接字服务器,并监听对它的连接,你将能够读取和写入数据。
要创建一个服务器独享,使用net.createServer()
方法:
其中,options是一个对象,指定创建套接字Server对象时要使用的选项,如allowHalfOpen,可以使一半的Duplex流保持开放,默认为false。connectLlistener
是connection
事件的回调函数,它在接收到连接时被执行。
举例:
服务端也可以用稍不同的方式接受TCP连接,即显式处理"connection"事件:
上述两个例子只是写法不同,并无本质区别。
创建TCP客户端
现在让我们创建一个TCP客户端连接到刚创建的服务器上,该客户端向服务器发送一串消息,并在得到服务器的反馈后关闭连接。下面的代码描述了这一过程。
再举个例子:
希望本文所述对大家nodejs程序设计有所帮助。