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 相关文章推荐
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
Aug 21 NodeJs
详解nodejs 文本操作模块-fs模块(四)
Dec 22 NodeJs
NodeJS实现客户端js加密
Jan 09 NodeJs
nodejs连接mysql数据库简单封装示例-mysql模块
Apr 10 NodeJs
详解如何在NodeJS项目中优雅的使用ES6
Apr 22 NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 NodeJs
详解nodejs中express搭建权限管理系统
Sep 15 NodeJs
NodeJs通过async/await处理异步的方法
Oct 09 NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 NodeJs
详解nodeJs文件系统(fs)与流(stream)
Jan 24 NodeJs
nodejs之koa2请求示例(GET,POST)
Aug 07 NodeJs
NodeJS 文件夹拷贝以及删除功能
Sep 03 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
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
PHP生成数组再传给js的方法
2014/08/07 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
jquery 简单应用示例总结
2013/08/09 Javascript
node.js Web应用框架Express入门指南
2014/05/28 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
javascript动态创建表格及添加数据实例详解
2015/05/13 Javascript
走进javascript——不起眼的基础,值和分号
2017/02/24 Javascript
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
vue-cli3.0使用及部分配置详解
2018/08/29 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
axios封装与传参示例详解
2020/10/18 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
[50:12]EG vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python Django框架实现自定义表单提交
2016/03/25 Python
python自动12306抢票软件实现代码
2018/02/24 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
使用AJAX和Django获取数据的方法实例
2020/10/25 Python
CSS3实现多样的边框效果
2018/05/04 HTML / CSS
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
美国鲜花递送:UrbanStems
2021/01/04 全球购物
金蝶的一道SQL笔试题
2012/12/18 面试题
优秀毕业自我鉴定
2014/02/15 职场文书
保卫科工作岗位职责
2014/03/01 职场文书
党的群众路线教育实践活动对照检查材料(四风)
2014/09/27 职场文书
团支部书记竞选稿
2015/11/21 职场文书
python 中的jieba分词库
2021/11/23 Python
分享几种python 变量合并方法
2022/03/20 Python
JAVA长虹键法之建造者Builder模式实现
2022/04/10 Java/Android