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的模板视图机制分析
Jul 19 NodeJs
nodejs 的 session 简单使用
Jun 06 NodeJs
用NodeJS实现批量查询地理位置的经纬度接口
Aug 16 NodeJs
nodejs中全局变量的实例解析
Mar 07 NodeJs
详解如何在NodeJS项目中优雅的使用ES6
Apr 22 NodeJs
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
Sep 29 NodeJs
nodejs实现范围请求的实现代码
Oct 12 NodeJs
nodejs 使用 js 模块的方法实例详解
Dec 04 NodeJs
nodejs 使用http进行post或get请求的实例(携带cookie)
Jan 03 NodeJs
nodejs的安装使用与npm的介绍
Sep 11 NodeJs
nodejs环境使用Typeorm连接查询Oracle数据
Dec 05 NodeJs
Nodejs文件上传、监听上传进度的代码
Mar 27 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 fopen下载远程文件的函数
2016/11/18 PHP
PHP实现浏览器格式化显示XML的方法示例
2019/01/22 PHP
js列举css中所有图标的实现代码
2011/07/04 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
2014/06/23 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
2015/03/04 Javascript
JavaScript检测字符串中是否含有html标签实现方法
2015/07/01 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
Node.js实现文件上传
2016/07/05 Javascript
JS控制TreeView的结点选择
2016/11/11 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
vue-cli3中配置alias和打包加hash值操作
2020/09/04 Javascript
python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
2013/12/08 Python
Python实现查询某个目录下修改时间最新的文件示例
2018/08/29 Python
django如何通过类视图使用装饰器
2019/07/24 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
Python FFT合成波形的实例
2019/12/04 Python
Python ORM编程基础示例
2020/02/02 Python
python爬虫基础知识点整理
2020/06/02 Python
python温度转换华氏温度实现代码
2020/12/06 Python
Casetify官网:自制专属手机壳、iPad护壳和Apple Watch手表带
2018/05/09 全球购物
在加拿大在线租赁和购买电子游戏:Game Access
2019/09/02 全球购物
网站设计师的岗位职责
2013/11/21 职场文书
高中生学习生活的自我评价
2013/11/27 职场文书
大学军训感言800字
2014/02/27 职场文书
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
师恩难忘教学反思
2014/04/27 职场文书
家庭贫困证明书(3篇)
2014/09/15 职场文书
篮球友谊赛通讯稿
2014/10/10 职场文书
关于html选择框创建占位符的问题
2021/06/09 HTML / CSS
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server