位置: 编程技术 - 正文

Node.js之网络通讯模块实现浅析(node.js网站)

编辑:rootadmin

推荐整理分享Node.js之网络通讯模块实现浅析(node.js网站),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:node.js网页,node.js网页,nodejs connect,node.js net,node.js net,node.js tcp,nodejs connect,node.js net,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

想必我们在用Node.js用的最多的应该是创建http服务,所以对于每个Web开发工程师而言,Node.js的网络相关模块学习是必不可少。

Node.js的网络模块架构

在Node.js的模块里面,与网络相关的模块有Net、DNS、HTTP、TLS/SSL、HTTPS、UDP/Datagram,除此之外,还有v8底层相关的网络模块有tcp_wrap.cc、udp_wrap.cc、pipe_wrap.cc、stream_wrap.cc等等,在Javascript层以及C++层之间通过process.binding进行桥接相互通信。

Net模块

Net模块提供了一些用于底层的网络通信接口,包括创建服务器以及客户端,其中HTTP模块也是基于Net模型的上层封装,在Net模块里面主要提供net.Server以及net.Socket

创建TCP服务端

创建一个TCP服务器,可以通过使用构造函数new net.Server或者使用工厂方法net.createServer,这两个方法都会返回一个net.Server类,可接收两个可选参数。

Node.js之网络通讯模块实现浅析(node.js网站)

在listen监听的时候没有指定端口的话会自动随意监听一个端口,创建完成一个TCP服务器后,使用tenlent 0.0.0.0 ,链接后可与服务器进行数据通信。通过createServer实例化一个服务后,服务会去监听客户端请求,与客户端建立了链接之后会在回调里面抛出建链的net.Socket对象。

创建TCP客户端

创建一个TCP客户端链接可以使用构造函数new net.Socket或者其工厂方法net.createConnection,创建成功后都会返回一个net.Socket实例。

Socket

socket是啥这里就不做详细的阐述了,下面主要了解下net.Socket这个构造体主要有提供一些什么方法、监听事件的使用。

相关事件

connect : 当客户端与服务端成功建立链接之后触发,如果链接不上服务器直接抛出error事件错误然后退出node进程。 data : 当客户端收到服务器传送过来的数据或者是客户端传送给服务器的数据的时候触发回调。 end : 当另外一侧发送FIN包断开的时候触发,默认情况下面 (allowHalfOpen == false)socket会自我销毁(如果写入待处理队列里面还没正式响应回包),但是我们可以设置allowHalfOpen参数为true,这样可以继续往该socket里面写数据,但是我们需要自己去调用 end 方法去消耗这个socket,不然可能会造成句柄泄漏。 close : 链接断开的时候触发,但是如果在传输的过程中有错误的话这里会在回调函数里面抛出 error。 timeout : 当socket超时空闲的时候触发,如果要在队列里面销毁需要手动去调close方法。 lookup : 域名解析完成的时候触发。 drain : 写完缓存的时候触发,可使用在上传大小限制中。

相关方法

write() : 服务端给客户端发送数据或者是客户端给服务端发送数据。 address() : 获取服务绑定的socket的IP地址,返回对象有三个属性,分别为端口、host以 及IPvX版本。 end() : 半关闭socket,会发送一个FIN包,服务器仍然可能发送一些数据,也可以这样调用socket.end(data,encoding)。 pause() : 暂停读取数据,可以用作对数据上传限制。 resume() : 继续数据读取。 setEncoding() : 设置数据流的获取格式。 setKeepAlive() : 允许/禁止keep-alive功能。 setNoDelay() : 禁止Nagele算法,TCP链接默认使用Nagle算法,它们在发送之前数据会被缓存。这是为true的话在每次socket.write()的时候会立即发送数据,默认为true。 setTimeout() : 当一个空闲的socket在多少秒后不活跃会被接受到timeout事件,但是该socket不会停止销毁,需要手动调用end()或者destroy()。表示禁止空闲超时。

相关属性

bufferSize : 当前缓存的等待被发送的字符串的数量。 bytesRead : 收到的字节的数量。 bytesWritten : 发送的字节的数量 destroyed : 标识链接是否已经被破坏,一旦被破环,就不用使用该链接来传输数据。 localAddress : 远程客户端链接本地地址的host。如果我们监听服务的host是0.0.0.0,而客户端链接的是'..1.1',最后的值是后者。 localPort : 本地的端口。 remoteAddress : 客户端IP,如果socket已经是destryed的话,该值为undefined。 remoteFamily : 客户端是IPvX

回包异常处理

服务器从客户端接受到需要处理的数据后进入处理环节,再业务逻辑处理完成之前如果socket以外断开的话,待服务器再给客户端回报的时候会直接响应error事件并报错Error : This socket has benn ended by the other part,所以在回报之前服务端需要先判断该socket是否被销毁,如果没有被销毁则回包,如果已经断开则销毁:

限制客户端数据大小

对请求大小限制是服务安全里面比不可少的一个环节,服务端不能无限大小的去接受客户端发送过来的所有数据,而限制大小就是第一道门槛。

标签: node.js网站

本文链接地址:https://www.jiuchutong.com/biancheng/377917.html 转载请保留说明!

上一篇:NodeJS基础API搭建服务器详细过程记录(基于nodejs的api框架)

下一篇:详解nodejs爬虫程序解决gbk等中文编码问题(nodejs爬虫技术)

  • 净利润跟税后利润是二个概念吗
  • 发票丢失第一联盖章能用么
  • 车辆保险费发票的会计分录
  • 交强险必须交车船使用税吗?交多少钱?
  • 小型微利企业的从业人数和资产总额
  • 取得的高速公路发票可以抵扣吗
  • 租赁设备损毁赔偿案例
  • 金税四期正式启动
  • 增值税纳税申报表附列资料(三)
  • 公司破产债务清偿顺序是怎样的
  • 公司汽车上牌费入什么科目
  • 劳务企业向总包提供
  • 培训产生的费用
  • 未确认融资收益怎么算
  • 小规模纳税人生活服务业免征增值税
  • 申报入库税款怎么分税种发给税管员
  • 注册公司服务费是多少
  • 税费返还怎么做会计科目
  • 增值税专票未认证丢失怎么办
  • 调低社保基数怎么操作
  • 运费营改增时间
  • 哪些人可以享受长护险
  • 非居民企业能否认定为一般纳税人
  • 总包分包差额征税是什么意思
  • 企业股东变更需要哪些手续
  • 开票金额开多了,对公司有影响吗
  • 不动产处置流程
  • 净利润和毛利润的计算公式
  • 两个帐套合并为一个
  • 超市预付卡过了还能退吗
  • 贷款损失准备如何提取
  • 成本核算的原则和要求
  • 以前年度损益调整怎么做账
  • php写入xml
  • win11系统未激活
  • 劳务派遣增值税差额征税
  • lnmgr.exe是什么
  • 银行企业未达账户怎么办
  • 库房存货标准
  • 企业养老金有几个档次
  • 应纳所得税额税率表
  • 简单的随机乱码怎么解决
  • 汇算清缴补交的所得税怎么记帐
  • idea连接sqlserver数据库教程
  • 完美解决win10间歇性掉线
  • 帝国cms是基于什么的
  • 车辆购置税是税前还是税后
  • 可供出售金融资产新准则叫什么
  • 应交税费月末要结平
  • 预收账款未发货会计分录
  • dedecmsv6插件不能用
  • 公司车转个人名下车牌需要换吗
  • db2 history
  • sql server必知必会
  • 银行提供资金来源
  • 销售货物收到托运怎么办
  • 以公允价值计量的金融资产
  • 更正会计凭证摘要怎么写?
  • 服务外包离岸业务是什么
  • 利润表中管理费用根据什么填
  • 收回投标保证金 建立台账
  • 事业单位职工福利费使用范围和标准
  • 税务局代开发票作废可以申请退税吗?
  • 库存商品销售后怎么做账
  • 盈余公积和未分配利润合起来构成
  • 重装机兵
  • 流言:Win9或终止32位系统 加速64位平台
  • ubuntu 14.04.6
  • 启动windows安全中心
  • 微信小程序上传文件的API是
  • js信息框
  • shell脚本遍历文件
  • 获取某个div的高度
  • 广东电子税务局官网登录入口
  • 市直单位正职是市单位一把手吗
  • 电子签章在电脑上怎样加印章
  • 新疆税务干部学校招聘
  • 代扣代缴企业所得税手续费
  • 国家税务总局广西壮族自治区税务局
  • 微信如何查询个人名下所有银行卡
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设