NodeJS で記述された TCP サービスは、sock ファイル (ドメイン ソケット) をリッスンでき、その HTTP サービスも同様のことができます。ただし、HTTP サービスとして sock ファイルに接続することにはあまり意味がないため、これは単なる試みです。
TCP サービスは次のように記述されます
var net = require('net');
net.createServer(関数 (ソケット) {
ソケット.on('データ', 関数 (データ) {
socket.write('received: ' data);
});
}).listen('/tmp/node_tcp.sock');
'/tmp/node_tcp.sock'
の上に接続します。
telnet /tmp/node_tcp.sock
/tmp/node_tcp.sock を試行しています...
(null) に接続されました。
エスケープ文字は「^]」です。
Hello World!
受信: Hello World!
正確に言うと、この記事は NodeJS の TCP および HTTP 監視ドメイン ソケット ファイルになります。
TCP によるドメイン ソケットの監視は依然として非常に一般的であり、たとえば、「/tmp/mysql.sock」を使用してローカルの MySQL サービスにアクセスするなど、ローカルのデータベースまたはキャッシュにアクセスするときにこれが行われることがあります。 TCP ポートが公開され、セキュリティが向上し、パフォーマンスも向上します。
次に、古典的な例を変更した、ドメイン ソケットでの NodeJS の HTTP 監視を見てみましょう
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Worldn');
}).listen('/tmp/node_http.sock');
console.log('/tmp/node_http.sock で実行されているサーバー');
ブラウザで上記の HTTP サービスにアクセスする方法がまだわからないので、Telnet を使用してテストしてください
telnet /tmp/node_http.sock
/tmp/node_http.sock を試行しています...
(null) に接続されました。
エスケープ文字は「^]」です。
GET/HTTP/1.1
HTTP/1.1 200 OK
コンテンツタイプ: text/plain
日付: 2015 年 1 月 26 日月曜日 04:21:09 GMT
接続: キープアライブ
転送エンコーディング: チャンク
c
ハローワールド
0
「/tmp/node_http.sock」上の HTTP リクエストを正しく処理できます。
NodeJS HTTP クライアントを使用してアクセスします
var http = require('http');
var オプション = {
ソケットパス: '/tmp/node_http.sock',
メソッド: 'GET'、
パス: '/'
};
var req = http.request(options, function(res){
console.log('STATUS: ' res.statusCode);
console.log('HEADERS: ' JSON.stringify(res.headers));
res.on('データ', 関数 (チャンク){
console.log(chunk.toString());
});
});
req.end();
ファイル名が http_client.js,
の場合、上記のコードを実行します。
ノード http_client.js
ステータス: 200
ヘッダー: {"content-type":"text/plain","date":"Mon, 26 Jan 2015 04:25:49 GMT","connection":"close","transfer-encoding":"chunked" }
ハローワールド
この記事は記録のためだけのものです。HTTP サービスにドメイン ソケットをリッスンさせる実際の目的は思いつきません。また、ブラウザーはそれにアクセスできません。