位置: 编程技术 - 正文

使用Node.js实现一个简单的FastCGI服务器实例(使用node.js实现用IP地址查询天气情况)

编辑:rootadmin

本文是我最近对Node.js学习过程中产生的一个想法,提出来和大家一起探讨。

Node.js的HTTP服务器

使用Node.js可以非常容易的实现一个http服务,最简的例子如官方网站的示例:这样就快速的搭建了一个监听在端口所有http请求的web服务。但是,在真正的生产环境中,我们一般很少直接使用Node.js作为面向用户的最前端web服务器,原因主要有以下几种:

1.基于Node.js单线程特性的原因,其健壮性的保证对开发人员要求比较高。2.服务器上可能已有其他http服务已占用端口,而非端口的web服务对用户显然不够友好。3.Node.js对文件IO处理并没太大优势,如作为常规网站可能需同时响应图片等文件资源。4.分布式负载场景也是一个挑战。

所以,使用Node.js作为web服务更多可能是作为游戏服务器接口等类似场景,大多是处理不需用户直接访问且仅作数据交换的服务。

基于Nginx作为前端机的Node.js web服务

基于上述原因,如果是使用Node.js搭建的网站形的产品,常规的使用方式是在Node.js的web服务前端放置另一个成熟的http服务器,如最常使用的是Nginx。然后使用Nginx作为反向代理访问基于Node.js的web服务。如:

这样就比较好的解决了上面提出的几个问题。

使用FastCGI协议通讯

不过,上述代理的方式也有一些不是很好的地方。一个是有可能的场景是需要控制后面的Node.js的web服务的直接http访问。不过,要解决的话也可以使用自身的服务或者依靠防火墙阻挡。另外一个是因为代理的方式毕竟是网络应用层上的方案,也不是很方便直接获取和处理与客户端http交互的数据,比如对keep-alive、trunk甚至cookie等的处理。当然这也与代理服务器自身的能力和功能完善程度相关。所以,我在想尝试另外一种处理方式,首先想到的就是现在在php web应用上普遍使用的FastCGI的方式。

什么是FastCGI

快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与Web服务器通信的协议。

FastCGI产生的背景是用来作为cgi web应用的替代方案,一个最明显的特点是一个FastCGI服务进程可以用来处理一连串的请求,web服务器会把环境变量和这个页面请求通过一个socket比如FastCGI进程与web服务器连接起来,连接可用Unix Domain Socket或是一个TCP/IP连接。关于更多的背景知识可以参考Wikipedia的词条。

Node.js的FastCGI实现

那么理论上我们只需要使用Node.js创建一个FastCGI进程,再指定Nginx的监听请求发送到这个进程就行了。由于Nginx和Node.js都是基于事件驱动的服务模型,“理论”上应该是天作地合的解决方案。下面我们就亲自实现一下。在Node.js中net模块刚好可用来建立一个socket服务,为了方便我们就选用unix socket的方式。在Nginx端的配置稍微修改下:新建一个文件node_fcgi.js,内容如下:

然后运行(因为权限的原因,请保证Nginx和node脚本使用同一用户或有相互权限的帐号运行,不然读写sock文件会遇到权限问题):

node node_fcgi.js在浏览器访问,我们看到运行node脚本的终端正常的接收到了数据内容,比如这样:

这就证明我们的理论基础已经实现了第一步,接下来只需要搞清楚这个buffer的内容如何解析就行了。

FastCGI协议基础

FastCGI记录由一个定长前缀后跟可变数量的内容和填充字节组成。记录结构如下:

version :FastCGI协议版本,现在默认就用1就好type :记录类型,其实可以当做是不同状态,后面具体说requestId :请求id,返回时需对应,如果不是多路复用并发的情况,这里直接用1就好contentLength :内容长度,这里最大长度是paddingLength :填充长度,作用就是长数据填充为满8字节的整数倍,主要是用来更有效地处理保持对齐的数据,主要是性能考虑reserved :保留字节,为了后续扩展contentData :真正的内容数据,一会具体说paddingData :填充数据,反正都是0,直接忽略就好。

具体的结构和说明请参考官网文档(

推荐整理分享使用Node.js实现一个简单的FastCGI服务器实例(使用node.js实现用IP地址查询天气情况),希望有所帮助,仅作参考,欢迎阅读内容。

使用Node.js实现一个简单的FastCGI服务器实例(使用node.js实现用IP地址查询天气情况)

文章相关热门搜索词:使用nodejs实现简单的局域网聊天功能,node.js使用教程,使用nodejs实现简单的局域网聊天功能,使用nodejs实现简单的局域网聊天功能,node.js怎么用,使用node.js实现用IP地址查询天气情况,使用nodejs实现简单的局域网聊天功能,使用node.js实现用IP地址查询天气情况,内容如对您有帮助,希望把文章链接给更多的朋友!

Node.js(安装,启动,测试) 概念Node.js是构建在Chromejavascriptruntime之上的平台,能够很容易的构建快速的,可伸缩性的网络应用程序。Node.js使用事件驱动,非阻塞I/O模式,这使它能

nodejs分页类代码分享 分页类,我放在plugin/Paginate.js/***分页插件类(缺少每页的显示数,listrows明天写)*@parampage{Number}当前页*@parampagesize{Number}每页记录数*@paramtotal{Number}总记录

nodejs实现黑名单中间件设计 黑名单Schema:/***CreatedbyYCXJ-wanglihuion/5/.*/'usestrict';varmongoose=require('mongoose');varSchema=mongoose.Schema;//1.短暂屏蔽2.永久屏蔽vardegree={TEMP:1,FOREVER:2};/***黑名单*

标签: 使用node.js实现用IP地址查询天气情况

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

上一篇:Node.js中对通用模块的封装方法(node.js 作用)

下一篇:Node.js(安装,启动,测试)(nodejs安装在c盘好还是d盘好)

  • 增值税年末结转的会计处理
  • 个人所得税网上申报
  • 赔偿给客户的货财务怎么处理
  • 小规模纳税人免税销售额
  • 增值税报表填写说明
  • 公司业务章需要报备吗
  • 收到赠品入库需要用什么记录
  • 营改增对房地产行业的影响
  • 有限责任公司应当具备的条件
  • 季节性停用的设备应计提折旧吗
  • 行政性罚款可以扣除吗
  • 对方公司退回货款,但发票已经开了怎么写摘要
  • 去年暂估的成本,汇算前收到的少,红冲全部暂估吗
  • 一般纳税人销售二手车增值税税率
  • 企业发票税收编码是什么
  • 银行代扣印花税
  • 营改增后物业管理公司需要交营业税吗
  • 企业所得税逾期未申报怎么补申报
  • 民办幼儿园需要给老师交五险一金吗
  • 宽带合同属于什么合同
  • 民办非企业是否可以出资设立公司
  • 作为职工福利费取得的专用发票不能抵扣吗
  • 质量成本包括哪两个成本
  • 半年付一次房租,房东一般提前多长时间催租
  • 生育津贴需要缴纳五险一金吗
  • 建筑公司材料费属于什么科目
  • 税控盘上报
  • 房地产企业纳税申报需要报哪些报表
  • 非盈利组织又称
  • 反映企业利润的指标有
  • bboy.exe进程是病毒吗 bboy进程安全吗
  • vue的iframe
  • php 缓存
  • 税收筹划的原则包括
  • 增值税纳税人的区别
  • 如何导入并使用数据库
  • wordpress项目开发
  • 银行汇票未用退回情况说明
  • 带你看看房间英语怎么写
  • vue面试题简书
  • pytorch .t()
  • 发票纳税人识别号错了怎么解决
  • md5 python3
  • 出口免税免的是哪部分的税
  • 资产负债表日后事项是什么意思?
  • sql server 性能优化
  • 企业所得税多预缴了怎么办
  • 资本公积和盈余公积是什么意思
  • 出口货物退免税的管理规定
  • 阶段性减免企业社保费实施政策对象
  • 贷款损失准备核销
  • 常用的加速折旧方法
  • 预付货款用什么会计科目
  • 技术咨询服务开票代码
  • 材料入库单金额写含税价吗
  • 其他应收款属于什么会计要素
  • 菜品毛利怎么计算
  • 红字发票开出的单价可以比蓝字发票高吗?
  • 预收账款余额在贷方是什么意思
  • 约当产量法下的加权平均法怎么算
  • 实例讲解液化滤镜瘦身
  • mysql不能运行
  • mac safari使用技巧
  • ramaint.exe - ramaint是什么进程 有什么用
  • 关机你的电脑遇到问题,需要重新启动,我们只收集
  • linux设置界面
  • js正则用法
  • adt Failed to create the Java Virtual Machine.
  • 使用div+css进行网页布局的三种方式
  • python 进程间通讯
  • jquery函数定义
  • node搭建本地服务器运行html
  • js如何获取浏览器窗口大小
  • python中的字符串必须写在一对双引号中
  • Python的collections模块中namedtuple结构使用示例
  • jquery 插件写法
  • 企业年金企业账户部分可以提取么
  • 杭州残保金2021年新政策申报时间
  • 湖南银税进件中心
  • 核定土地增值税的条件
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设