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 相关文章推荐
Windows系统下使用Sublime搭建nodejs环境
Apr 13 NodeJs
Nodejs下用submit提交表单提示cannot post错误的解决方法
Nov 21 NodeJs
配置nodejs环境的方法
May 13 NodeJs
nodejs后台集成ueditor富文本编辑器的实例
Jul 11 NodeJs
详解nodejs的express如何自动生成项目框架
Jul 12 NodeJs
深入解析nodejs HTTP服务
Jul 25 NodeJs
Nodejs进阶之服务端字符编解码和乱码处理
Sep 04 NodeJs
NodeJs通过async/await处理异步的方法
Oct 09 NodeJs
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
Jul 31 NodeJs
基于Nodejs的Tcp封包和解包的理解
Sep 19 NodeJs
Nodejs实现图片上传、压缩预览、定时删除功能
Oct 25 NodeJs
Nodejs实现WebSocket代码实例
May 19 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
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
十天学会php之第五天
2006/10/09 PHP
php笔记之:文章中图片处理的使用
2013/04/26 PHP
如何使用php判断服务器是否是HTTPS连接
2013/07/05 PHP
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
js之WEB开发调试利器:Firebug 下载
2007/01/13 Javascript
JQuery从头学起第三讲
2010/07/06 Javascript
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
Nodejs为什么选择javascript为载体语言
2015/01/13 NodeJs
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
2015/09/14 Javascript
利用jquery获取select下拉框的值
2016/11/23 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
webpack常用配置总览(小结)
2019/11/18 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
2020/07/19 Javascript
vuex 多模块时 模块内部的mutation和action的调用方式
2020/07/24 Javascript
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
Python实现线程状态监测简单示例
2018/03/28 Python
opencv转换颜色空间更改图片背景
2019/08/20 Python
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
大专生简历的自我评价
2013/11/26 职场文书
学习十八大精神心得体会
2013/12/31 职场文书
好军嫂事迹材料
2014/01/15 职场文书
高中生自我评语大全
2014/01/19 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
三八妇女节慰问信
2015/02/14 职场文书
十八大观后感
2015/06/12 职场文书
2016年公司新年寄语
2015/08/17 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
500字作文之难忘的同学
2019/12/20 职场文书
高端收音机+蓝牙音箱,JBL TUNER FM带收音蓝牙音箱评测
2021/04/24 无线电
Go语言实现一个简单的并发聊天室的项目实战
2022/03/18 Golang