NodeJS Web应用监听sock文件实例


Posted in NodeJs onFebruary 18, 2015

像 NodeJS 写的 TCP 服务可以监听在某个 sock 文件(Domain Socket) 上,它的 HTTP 服务也能这么干。虽然作为 HTTP 服务连接某个 sock 文件的意义不大,所以这里只算是一个纯粹的尝试。

TCP 服务是这样写

var net = require('net');

net.createServer(function (socket) {

  socket.on('data', function (data) {

    socket.write('received: ' + data);

  });

}).listen('/tmp/node_tcp.sock');

连接上面那个 '/tmp/node_tcp.sock'
telnet /tmp/node_tcp.sock

Trying /tmp/node_tcp.sock...

Connected to (null).

Escape character is '^]'.

Hello World!

received: Hello World!

准确说来本文应该是 NodeJS 的 TCP 和 HTTP 监听 Domain Socket 文件。

对于  TCP 监听 Domain Socket 还是很常用的,比如有时对本机的数据库或缓存的访问就会这么做,像用 '/tmp/mysql.sock' 来访问本机 MySQL 服务,这样就不需要启动 TCP 端口暴露出来,安全性有所提高,性能上也有一定的提升。

现在来看看 NodeJS 的 HTTP 监听在 Domain Socket 上, 从经典的例子来改造下

var http = require('http');

http.createServer(function (req, res) {

  res.writeHead(200, {'Content-Type': 'text/plain'});

  res.end('Hello World\n');

}).listen('/tmp/node_http.sock');

console.log('Server running at /tmp/node_http.sock');

尚不知如何在浏览器中访问以上的 HTTP 服务,所以用 telnet 测试

telnet /tmp/node_http.sock

Trying /tmp/node_http.sock...

Connected to (null).

Escape character is '^]'.

GET / HTTP/1.1

HTTP/1.1 200 OK

Content-Type: text/plain

Date: Mon, 26 Jan 2015 04:21:09 GMT

Connection: keep-alive

Transfer-Encoding: chunked
c

Hello World
0

能正确处理对  '/tmp/node_http.sock' 上的 HTTP 请求。

用 NodeJS HTTP Client 来访问

var http = require('http');
var options = {

  socketPath: '/tmp/node_http.sock',

  method: 'GET',

  path: '/'

};
var req = http.request(options, function(res){

  console.log('STATUS: ' + res.statusCode);

  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.on('data', function (chunk){

    console.log(chunk.toString());

  });

});
req.end();

执行上面的代码,假如文件名是 http_client.js,
node http_client.js

STATUS: 200

HEADERS: {"content-type":"text/plain","date":"Mon, 26 Jan 2015 04:25:49 GMT","connection":"close","transfer-encoding":"chunked"}

Hello World

本文只作记录,现在还想不到让 HTTP 服务监听在 Domain Socket 上的实际用意,况且浏览器也无法对它进行访问。
NodeJs 相关文章推荐
详解NodeJs支付宝移动支付签名及验签
Jan 06 NodeJs
nodejs实现发出蜂鸣声音(系统报警声)的方法
Jan 18 NodeJs
使用nodejs下载风景壁纸
Feb 05 NodeJs
nodejs使用express创建一个简单web应用
Mar 31 NodeJs
nodejs入门教程三:调用内部和外部方法示例
Apr 24 NodeJs
NodeJS创建最简单的HTTP服务器
May 15 NodeJs
nodeJS实现简单网页爬虫功能的实例(分享)
Jun 08 NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 NodeJs
nodejs用gulp管理前端文件方法
Jun 24 NodeJs
详解NodeJS Https HSM双向认证实现
Mar 12 NodeJs
使用nodejs实现JSON文件自动转Excel的工具(推荐)
Jun 24 NodeJs
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
May 30 NodeJs
NodeJS使用jQuery选择器操作DOM
Feb 13 #NodeJs
NodeJs基本语法和类型
Feb 13 #NodeJs
nodejs事件的监听与触发的理解分析
Feb 12 #NodeJs
nodejs 整合kindEditor实现图片上传
Feb 03 #NodeJs
NodeJS学习笔记之Connect中间件应用实例
Jan 27 #NodeJs
NodeJS学习笔记之Connect中间件模块(二)
Jan 27 #NodeJs
NodeJS学习笔记之Connect中间件模块(一)
Jan 27 #NodeJs
You might like
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
php中adodbzip类实例
2014/12/08 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
2020/05/26 PHP
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
2015/12/16 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
2016/01/05 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
2016/05/24 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
JS绘制微信小程序画布时钟
2016/12/24 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
React+Antd+Redux实现待办事件的方法
2019/03/14 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
NProgress显示顶部进度条效果及使用详解
2019/09/21 Javascript
Webpack设置环境变量的一些误区详解
2019/12/19 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
[02:30]辉夜杯主赛事第二日胜者组半决赛 CDEC.Y赛后采访
2015/12/26 DOTA
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
基于Python pip用国内镜像下载的方法
2018/06/12 Python
python将字符串list写入excel和txt的实例
2019/07/20 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
2020/11/11 Python
CSS3中Color的一些特性介绍
2012/05/27 HTML / CSS
幼儿教师师德师风演讲稿
2014/08/22 职场文书
新教师培训心得体会
2014/09/02 职场文书
2014年无财产无子女离婚协议书范本
2014/10/09 职场文书
敬业奉献模范事迹材料
2014/12/24 职场文书
小学五年级语文上册教学计划
2015/01/22 职场文书
灵山大佛导游词
2015/02/04 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
庆七一活动简报
2015/07/20 职场文书
PHP中strval()函数实例用法
2021/06/07 PHP