nodejs web應(yīng)用監(jiān)聽sock文件實(shí)例

字號(hào):


    這篇文章主要介紹了nodejs web應(yīng)用監(jiān)聽sock文件實(shí)例,本文講解 nodejs 的 tcp 和 http 監(jiān)聽 domain socket 文件例子,需要的朋友可以參考下
    像 nodejs 寫的 tcp 服務(wù)可以監(jiān)聽在某個(gè) sock 文件(domain socket) 上,它的 http 服務(wù)也能這么干。雖然作為 http 服務(wù)連接某個(gè) sock 文件的意義不大,所以這里只算是一個(gè)純粹的嘗試。
    tcp 服務(wù)是這樣寫
    代碼如下:
    var net = require('net');
    net.createserver(function (socket) {
    socket.on('data', function (data) {
    socket.write('received: ' + data);
    });
    }).listen('/tmp/node_tcp.sock');
    連接上面那個(gè) '/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!
    準(zhǔn)確說來本文應(yīng)該是 nodejs 的 tcp 和 http 監(jiān)聽 domain socket 文件。
    對(duì)于 tcp 監(jiān)聽 domain socket 還是很常用的,比如有時(shí)對(duì)本機(jī)的數(shù)據(jù)庫(kù)或緩存的訪問就會(huì)這么做,像用 '/tmp/mysql.sock' 來訪問本機(jī) mysql 服務(wù),這樣就不需要啟動(dòng) tcp 端口暴露出來,安全性有所提高,性能上也有一定的提升。
    現(xiàn)在來看看 nodejs 的 http 監(jiān)聽在 domain socket 上, 從經(jīng)典的例子來改造下
    代碼如下:
    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 服務(wù),所以用 telnet 測(cè)試
    代碼如下:
    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
    能正確處理對(duì) '/tmp/node_http.sock' 上的 http 請(qǐng)求。
    用 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();
    執(zhí)行上面的代碼,假如文件名是 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
    本文只作記錄,現(xiàn)在還想不到讓 http 服務(wù)監(jiān)聽在 domain socket 上的實(shí)際用意,況且瀏覽器也無法對(duì)它進(jìn)行訪問。