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+express+html5 实现拖拽上传
Aug 08 NodeJs
Nodejs从有门道无门菜鸟起飞必看教程
Jul 20 NodeJs
NodeJs读取JSON文件格式化时的注意事项
Sep 25 NodeJs
nodejs入门教程二:创建一个简单应用示例
Apr 24 NodeJs
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
May 13 NodeJs
nodeJS微信分享
Dec 20 NodeJs
Nodejs连接mysql并实现增、删、改、查操作的方法详解
Jan 04 NodeJs
nodejs+mongodb aggregate级联查询操作示例
Mar 17 NodeJs
NodeJS加密解密及node-rsa加密解密用法详解
Oct 12 NodeJs
Nodejs处理异常操作示例
Dec 25 NodeJs
nodejs使用async模块同步执行的方法
Mar 02 NodeJs
使用nodejs实现JSON文件自动转Excel的工具(推荐)
Jun 24 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 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
php实现paypal 授权登录
2015/05/28 PHP
PHP5.6新增加的可变函数参数用法分析
2017/08/25 PHP
onpropertypchange
2006/07/01 Javascript
基于jQuery的左右滚动实现代码
2010/12/03 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
JS实现日期加减的方法
2013/11/29 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
vue实现引入本地json的方法分析
2018/07/12 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
详解vue-cli脚手架中webpack配置方法
2018/08/22 Javascript
使用vue 国际化i18n 实现多实现语言切换功能
2018/10/11 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
npm ci命令的基本使用方法
2020/09/20 Javascript
Python修改Excel数据的实例代码
2013/11/01 Python
Python绘制堆叠柱状图的实例
2019/07/09 Python
简单了解Python3里的一些新特性
2019/07/13 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
python识别验证码的思路及解决方案
2020/09/13 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
2020/11/02 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
会计职业生涯规划书
2014/01/13 职场文书
全神贯注教学反思
2014/02/03 职场文书
领导失职检讨书
2014/02/24 职场文书
医院党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
社保缴纳证明申请书
2014/11/03 职场文书
面试通知单大全
2015/04/20 职场文书
教师节联欢会主持词
2015/07/04 职场文书
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python