白首齐眉网

Node学习九 —— 创建TCP服务器

Node学习九 —— 创建TCP服务器

创建TCP服务器

传输控制协议(Transmission Control Protocol,学习TCP)是Internet的基础协议之一,它位于网际协议(Internet Protocol,创建,学习P)之上,创建为应用层提供了一种传输机制。学习例如,创建HTTP工作在TCP之上,学习其他很多面向连接的创建应用(诸如RC、SMTP和MAP)也工作在TCP之上。学习

Node以htp.Server伪类实现了HTTP服务器,创建改伪类继承自 .net Server中的学习TCP服务器伪类,这意味着本文所有内容也可以应用到Node HTTP服务器中去。创建

创建TCP服务器

const net = require('net');const server = net.createServer(function (socket) {     socket.on("data",学习 function (data) {         console.log(data);        socket.write("Create A TCP Server");    })    socket.on('end',function(data){         console.log(data);    })})server.listen(1234);

首先使用createServer方法创建一个服务器对象,创建的创建时候可以传入一个回调,这个后面再说。学习

然后,创建的服务器对象server也是一个事件发射器,16行可以看到,发射一个listen事件,上述代码中即:服务器绑定到本地1234端口,可以通过这个端口访问到服务器(最简单的方法就是在浏览器输入localhost:1234,然后观察控制台输出)。

当然,除了在构造服务器对象时监听事件,还可以这样:

const server = net.createServer();server.on("connect", function(socket) {     socket.end();// 断开端口链接    socket.close();// 关闭服务器})server.on("data", function(data) {     console.log(data);})

应用套接字

当获取“connection”事件时也获得了一个套接字对象作为回调函数的第一个参数(参考上面的代码块),套接字对象既是可读流也是可写流,所以当它获取到数据包的时候会发射“data”事件,当链接关闭的时候会发射“end”事件。同时,应用socket.write方法可以向套接字写入缓冲区或者字符串,通过socket.end方法告诉写完数据之后终止连接。

const net = require('net');const server = net.createServer();server.on("connection", function (socket) {     console.log('new connection');    socket.setEncoding('utf-8');    socket.write("Hello Node!");    socket.on('data', function (data) {         console.log(data.toString());    })})server.on('end', function () {     console.log("Connection ended");})server.listen(1234);

这样,你就能通过TCP发送和接受数据了。

telnet:连接TCP的一个命令,window也可用,但是需要手动开启,在控制面板,找到程序与功能,进入,在左边找到启用或关闭windows功能,点击进入配置页面,勾选Telnet Client,即可在cmd使用telnet命令了。

同样,你可是试试怎么配合套接字使用一个只读流。

空闲套接字

可是设置超时时间,当超时之后关闭连接

const timeout = 30000; // 半分钟const net = require('net');const server = net.createServer();server.on("connection", function (socket) {     // 设置超时时间    socket.setTimeout(timeout);    // 超时监听器    socket.on('timeout', function () {         socket.write("Timeout and connection ended!");        socket.end();    })})server.listen(1234);

设置保持运行

为了避免网络或者终端上出现超时,Node通过发送带有确认标志的空TCP包触发的空应答来确保连接持久保持,这会使两端一直处于连接状态。

可以通过一下代码保持运行功能:

socket.setKeepAlive(true);// 指定最后接受到的包与下一个保持运行的空包之间的延时时间,可以通过添加第二个参数实现。socket.setKeepAlive(true,30000);

延时或非延时

在发送TCP数据包之前,内核会使用Nagle算法来调整发送时间,也就是,你在代码里执行了发送操作,但是内核会缓冲这个数据,很可能不会马上帮你发送出去。

如果要使延迟失效,在write命令之后强制数据马上被发送出去,可以调用下面的方法:

socket.setNoDelay(true); // 不过一般不这么做,也不建议这么做

常用事件:

// 监听连接server.listen(port, host); // port: 端口,host:地址(可选,如果忽略,会指向任意IP地址的链接// 关闭连接server.close(); // 关闭服务器(区别关闭连接socket.end())// 处理错误// 通过监听`error`事件,在回调中处理错误// 如果未能捕获错误,那么会抛出异常,终止程序

未经允许不得转载:白首齐眉网 » Node学习九 —— 创建TCP服务器