IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 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`事件,在回调中处理错误
// 如果未能捕获错误,那么会抛出异常,终止程序
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 21:30:38  更:2022-09-24 21:32:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:24:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码