Node.js之如何创建TCP服务器端

 更新时间:2024年09月06日 09:57:00   作者:一介白衣ing  
这篇文章主要介绍了Node.js之如何创建TCP服务器端问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

什么是TCP

TCP全名为传输控制协议,在OSI七层模型(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)中属于传输层协议。

TCP是面向连接的,传输之前需要3次握手形成会话,之后服务器端和客户端才能互相发送数据。

在创建会话过程中,服务器和客户端分别提供一个套接字,两个套接字共同形成一个连接。

创建TCP服务端

api地址:http://nodejs.cn/api/net.html

服务端的创建我们使用node提供的net包,客户端我们使用telnet工具来模拟。

简单实现一个TCP服务端:

const net = require("net");

const netServer = net.createServer((socket) => {
  socket.on("data", (data) => {
    socket.write("hello," + data.toString());
  });

  socket.on("end", () => {
    console.log("bye bye ~");
  });

  socket.write("欢迎来到比尔吉沃特,请输入召唤师名称:");
});

netServer.listen(9186, () => {
  console.log("running");
});

来做个简单的解释:我们调用net包的createServer方法来创建一个tcp服务。里面需要传递一个回调函数作为参数,函数有一个参数为连接所需套接字。

在回调函数里面,我们绑定了data事件,它在数据传输的时候会触发。(传输的数据${data}为一个Buffer)

我们客户端模拟一下:

➜  test-node telnet localhost 9186
Trying ::1...
Connected to localhost.
Escape character is '^]'.
欢迎来到比尔吉沃特,请输入召唤师名称:zhangsan
hello,zhangsan

还有另外一种方法可以实现,本身net.CreateServer()创建的服务器是一个EventEmitter实例:

const netServer = net.createServer();
netServer.on("connection", (socket) => {
  socket.on("data", (data) => {
    socket.write("welcome, " + data.toString());
  });
  socket.write("欢迎来到node.js, 请输入你的名字:");
});

netServer.listen(9186, () => {
  console.log("running");
});

TCP服务的事件

这里简单列一下,详细触发条件在文档:http://nodejs.cn/api/net.html

服务器事件:

  • listening server.listen()时触发
  • connection 每一个客户端连接到套接字时触发
  • close服务器关闭时触发
  • error服务器异常时触发

连接事件:

  • data一端调用write()事件传数据,另一端触发。
  • end 连接中任意一端发送了FIN数据时触发
  • connect 客户端事件,套接字与服务器端连接成功触发
  • drain 任意一端调用write()事件传数据,当前端触发。
  • error 异常发生时
  • close 套接字完全关闭时
  • timeout 一定时间之后连接不在活跃时触发。

注意点

Nagle算法:

缓冲区数据达到一定数量才会将其发出,以此节约网络资源。

node中默认开启Nagle算法,使用socket.setNoDelay(true)关闭,使数据立即发送。

关闭Nagle算法之后,一端可能收到多个小数据包的合并,所以多次write()可能另一端只触发一次data()

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Node.js调用DeepSeek API的完整指南

    Node.js调用DeepSeek API的完整指南

    本文将介绍如何使用 Node.js 调用 DeepSeek API,实现流式对话并保存对话记录,Node.js 版本使用现代异步编程方式实现,支持流式处理和错误处理,文章通过代码示例讲解的非常详细,需要的朋友可以参考下
    2025-02-02
  • Koa2框架快速入门与基本使用方式

    Koa2框架快速入门与基本使用方式

    这篇文章主要介绍了Koa2框架快速入门与基本使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 详解Node.js如何开发命令行工具

    详解Node.js如何开发命令行工具

    追求更高的效率是码农不断的追求。选择合适的工具,合理搭配使用,既能提高一部分开发效率,又能改善写代码时的心情。使用Node.js开发命令行工具是开发者应该掌握的一项技能,适当编写命令行工具以提高开发效率。
    2016-08-08
  • Node.js里面的内置模块和自定义模块的实现

    Node.js里面的内置模块和自定义模块的实现

    这篇文章主要介绍了Node.js里面的内置模块和自定义模块的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • node.js中使用ejs渲染数据的代码实现

    node.js中使用ejs渲染数据的代码实现

    这篇文章主要介绍了node.js中使用ejs渲染数据,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • 解决node终端下运行js文件不支持ES6语法

    解决node终端下运行js文件不支持ES6语法

    这篇文章主要介绍了解决node终端下运行js文件不支持ES6语法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • nodejs教程之异步I/O

    nodejs教程之异步I/O

    nodejs的核心之一就是非阻塞的异步IO,于是想知道它是怎么实现的,经过一份研究,找到些答案,在此跟大家分享下。
    2014-11-11
  • Node.js API详解之 console模块用法详解

    Node.js API详解之 console模块用法详解

    这篇文章主要介绍了Node.js API详解之 console模块用法,总结分析了Node.js API中console模块基本函数、使用方法与操作注意事项,需要的朋友可以参考下
    2020-05-05
  • Nodejs http模块返回内容中文乱码问题及解决

    Nodejs http模块返回内容中文乱码问题及解决

    这篇文章主要介绍了Nodejs http模块返回内容中文乱码问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • node使用Git Bash作为命令行终端示例

    node使用Git Bash作为命令行终端示例

    这篇文章主要为大家介绍了node使用Git Bash作为命令行终端示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08

最新评论