2.5 TCP服务
如果开发者大多数时间都在进行Web站点的开发,那么TCP服务和HTTP服务相比出场率并不高,但HTTP仅仅是应用层协议的一种,除了HTTP之外,应用层还有一些比较常用的协议,例如FTP、SMTCP、Telnet等。
TCP服务不是我们介绍的重点,这一节会简单介绍使用Node创建TCP服务的方法,以及一个应用的例子。
2.5.1 TCP和Socket
大多数开发者都知道网络服务需要Socket编程,也都清楚TCP协议是用来传输数据的,TCP协议和Socket又有哪些区别呢?
Socket是对TCP协议的一种封装方式,Socket本身并不是协议,而是一个编程接口,在这个接口上定义了一些基础的方法,例如accept、listen、write等,如果一种编程语言实现了socket接口,那么它就可以通过socket接口预定义的方法来解析使用TCP协议传输的数据流。(socket并不是专门为TCP协议设计的,在设计之初就期望能兼容多种传输层协议。)
2.5.2 创建TCP服务器
在Node中有三种Socket,分别对应实现TCP、UDP以及UNIX Socket,与这些相关的代码都位于Net模块中(UNIX Socket即UNIX Domain Socket,和面向网络的TCP、UDP不同,主要用于本地系统的进程间通信)。
Net模块和HTTP模块的结构很相似,包含了Server类、Socket类以及一些预定义的方法,下面的代码会创建一个TCP Server。
代码2.16 创建一个TCP服务器
上面的代码中,如果服务器收到了一个连接请求,就会返回一个Hello字符串,虽然该server监听了8124端口,但如果在浏览器里打开localhost:8124的方式来访问,就会出现GET http://localhost:8124/ net::ERR_INVALID_HTTP_RESPONSE的错误。原因也很简单,一个TCP服务器不会返回符合HTTP协议标准的响应,为了验证这个服务器,可以使用telnet命令,打开控制台输入:
控制台随之输出:
这表明TCP服务正常启动了。
如果不想使用命令行,也可以在代码中使用connect或者createConnection方法来连接到一个TCP服务器,二者没有任何区别。
代码2.17 TCP客户端