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 提示‘xxx’ 不是内部或外部命令解决方法
Nov 20 NodeJs
nodejs redis 发布订阅机制封装实现方法及实例代码
Dec 15 NodeJs
Nodejs 发送Post请求功能(发短信验证码例子)
Feb 09 NodeJs
3分钟快速搭建nodejs本地服务器方法运行测试html/js
Apr 01 NodeJs
nodejs 终端打印进度条实例代码
Apr 22 NodeJs
详解nodejs模板引擎制作
Jun 14 NodeJs
NodeJS简单实现WebSocket功能示例
Feb 10 NodeJs
详解Nodejs内存治理
May 13 NodeJs
修改Nodejs内置的npm默认配置路径方法
May 13 NodeJs
Nodejs让异步变成同步的方法
Mar 02 NodeJs
浅谈Node的内存泄露问题
May 06 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
thinkPHP框架中执行原生SQL语句的方法
2017/10/25 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
js取两个数组的交集|差集|并集|补集|去重示例代码
2013/08/07 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
javascript淘宝主图放大镜功能
2016/10/20 Javascript
前端开发必知的15个jQuery小技巧
2017/01/22 Javascript
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
JavaScript canvas实现文字时钟
2021/01/10 Javascript
python提取内容关键词的方法
2015/03/16 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
TensorFlow的权值更新方法
2018/06/14 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
Python图像处理之简单画板实现方法示例
2018/08/30 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
Python设计模式之原型模式实例详解
2019/01/18 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
python制作抽奖程序代码详解
2021/01/15 Python
Spy++的使用方法及下载教程
2021/01/29 Python
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
五好关工委申报材料
2014/05/31 职场文书
2014年公务员退休工资改革方案
2014/10/01 职场文书
保安2014年终工作总结
2014/12/06 职场文书
解决golang结构体tag编译错误的问题
2021/05/02 Golang
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技
Python采集股票数据并制作可视化柱状图
2022/04/04 Python