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中实现路由功能
Dec 29 NodeJs
nodeJS代码实现计算交社保是否合适
Mar 09 NodeJs
浅谈Nodejs应用主文件index.js
Aug 28 NodeJs
NodeJS测试框架mocha入门教程
Mar 28 NodeJs
nodejs socket实现的服务端和客户端功能示例
Jun 02 NodeJs
NodeJS使用七牛云存储上传文件的方法
Jul 24 NodeJs
利用nodeJs anywhere搭建本地服务器环境的方法
May 12 NodeJs
NodeJs实现简单的爬虫功能案例分析
Dec 05 NodeJs
NodeJS有难度的面试题(能答对几个)
Oct 09 NodeJs
Nodejs实现WebSocket代码实例
May 19 NodeJs
nodeJs项目在阿里云的简单部署
Nov 27 NodeJs
Node.js实现爬取网站图片的示例代码
Apr 04 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
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
2013/09/30 PHP
php类声明和php类使用方法示例分享
2014/03/29 PHP
php基于str_pad实现卡号不足位数自动补0的方法
2014/11/12 PHP
PHP的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
dojo学习第二天 ajax异步请求之绑定列表
2011/08/29 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
详解数组Array.sort()排序的方法
2020/05/09 Javascript
获取url中用&隔开的参数实例(分享)
2017/05/28 Javascript
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
解决layui的form里的元素进行动态生成,验证失效的问题
2019/09/14 Javascript
vue Tab切换以及缓存页面处理的几种方式
2019/11/05 Javascript
vue实现购物车的监听
2020/04/20 Javascript
详解JavaScript中的Object.is()与"==="运算符总结
2020/06/17 Javascript
详解ES6 扩展运算符的使用与注意事项
2020/11/12 Javascript
python 字典中文key处理,读取,比较方法
2018/07/06 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
python图片验证码识别最新模块muggle_ocr的示例代码
2020/07/03 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
奥地利婴儿用品和玩具购物网站:baby-markt.at
2020/01/26 全球购物
linux面试题参考答案(8)
2015/08/11 面试题
工作决心书范文
2014/03/11 职场文书
经典婚礼主持开场白
2014/03/13 职场文书
小学教师评语大全
2014/04/23 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
工作会议通知
2015/04/15 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书
前端实现滑动按钮AJAX与后端交互的示例代码
2022/02/24 Javascript
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis