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学习笔记之网络编程
Aug 03 NodeJs
Nodejs的express使用教程
Nov 23 NodeJs
nodejs 的 session 简单使用
Jun 06 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
Nodejs 和Session 原理及实战技巧小结
Aug 25 NodeJs
nodejs 图解express+supervisor+ejs的用法(推荐)
Sep 08 NodeJs
NodeJs form-data格式传输文件的方法
Dec 13 NodeJs
NodeJs入门教程之定时器和队列
Mar 08 NodeJs
Nodejs异步流程框架async的方法
Jun 07 NodeJs
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
Nov 18 NodeJs
通过实例了解Nodejs模块系统及require机制
Jul 16 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时的知识积累总结
2013/06/07 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
PHP 二维array转换json的实例讲解
2018/08/21 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
Jquery chosen动态设置值实例介绍
2013/08/08 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
2015/02/04 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
js电话号码验证方法
2015/09/28 Javascript
JavaScript与java语言有什么不同
2016/09/22 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
2017/02/10 Javascript
用JavaScript和jQuery实现瀑布流
2017/03/19 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
jquery+css实现侧边导航栏效果
2017/06/12 jQuery
微信小程序使用radio显示单选项功能【附源码下载】
2017/12/11 Javascript
Node.js使用MySQL连接池的方法实例
2018/02/11 Javascript
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
Python实现Sqlite将字段当做索引进行查询的方法
2016/07/21 Python
解决Python的str强转int时遇到的问题
2018/04/09 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
python调用百度语音识别api
2018/08/30 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
2019/04/11 Python
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
June Jacobs尊积帕官网:知名的spa水疗护肤品牌
2019/03/21 全球购物
应届毕业生自荐信例文
2014/02/26 职场文书
外贸英文求职信范文
2015/03/19 职场文书
个人欠条范本
2015/07/03 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
redis哨兵常用命令和监控示例详解
2021/05/27 Redis
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android