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、Python写的一个简易HTTP静态文件服务器
Jul 18 NodeJs
Nodejs如何复制文件
Mar 09 NodeJs
用NodeJS实现批量查询地理位置的经纬度接口
Aug 16 NodeJs
Nodejs高扩展性的模板引擎 functmpl简介
Feb 13 NodeJs
nodejs中使用HTTP分块响应和定时器示例代码
Mar 19 NodeJs
Nodejs--post的公式详解
Apr 29 NodeJs
基于nodejs实现微信支付功能
Dec 20 NodeJs
nodejs搭建本地服务器轻松解决跨域问题
Mar 21 NodeJs
Nodejs实现爬虫抓取数据实例解析
Jul 05 NodeJs
NodeJS加密解密及node-rsa加密解密用法详解
Oct 12 NodeJs
nodejs微信开发之自动回复的实现
Mar 17 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
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
php缓存技术详细总结
2013/08/07 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
全面解析PHP操作Memcache基本函数
2016/07/14 PHP
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
完美解决IE低版本不支持call与apply的问题
2013/12/05 Javascript
关于img的href和src取变量及赋值的方法
2014/04/28 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
jquery+html5制作超酷的圆盘时钟表
2015/04/14 Javascript
jquery计算鼠标和指定元素之间距离的方法
2015/06/26 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
vue等两个接口都返回结果再执行下一步的实例
2020/09/08 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
python 实现识别图片上的数字
2019/07/30 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
解决margin 外边距合并问题
2019/07/03 HTML / CSS
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
大学生职业生涯规划大赛作品(精品)
2014/09/17 职场文书
考研英语复习计划
2015/01/19 职场文书
保护地球的宣传语
2015/07/13 职场文书
2015七夕情人节宣传语
2015/07/14 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
导游词之上饶龟峰
2019/10/25 职场文书
SpringBoot+Redis实现布隆过滤器的示例代码
2022/03/17 Java/Android
mysql数据库如何转移到oracle
2022/12/24 MySQL