試す
var io = require('socket.io').listen(require('http').createServer().listen(8124, '::1'));
または (デバッグ メッセージを取得するには):
var server = require('http').createServer().on('request', function (req, res) {
res.writeHead(200);
res.end('Welcome to socket.io.');
}).listen(8124, '::1');
var io = require('socket.io').listen(server);
curl ( curl -g http://[::1]:8124/
) と nodejs でテストしました:
require("http").get({hostname:"::1", port:8124,path:"/"}, function(res) {
console.log("Got response: " + res.statusCode);
res.on("data",function(chunk) {
console.log("BODY: " + chunk);
});
}).on("error", function(e) {
console.log("Got error: " + e.message);
});
「実際の」ホスト名を使用すると、クライアントで機能します。
require('socket.io-client').connect('http://ip6-localhost:8124/');
my /etc/hosts にはエントリが含まれている::1 ip6-localhost
ため、IPv6 アドレスのみを指すホスト名がある場合、これは機能するはずです。(最初の接続が機能しなかった場合、別のアドレスにフォールバックしないため、名前として localhost を使用しても、IPv4 から IPv6 にフォールバックしませんでした)。
悲しいことに、nodejs url モジュール (少なくとも debian のバージョン 0.6.19) はリテラル アドレスをサポートしていないようです。したがって、xmlhttprequest モジュールもサポートしていません。
console.log(require('url').parse('http://[::1]:8124/'));
socket.io-client モジュールもリテラル アドレスをサポートしていませんが、次のようにだますことができます。
require('socket.io-client').connect('http://blank:8124/', {host:'[::1]'});
ただし、これは XMLHTTPRequest をバックエンドとして使用するため、まだ nodejs では機能しません (おそらく、ブラウザーの「実際の」XMLHTTPRequest オブジェクト、またはより新しい nodejs バージョンで機能します)。
更新: 最近のノード バージョン (v0.9.6-16-g9668df8 を試行) は、url パーサーでリテラル ipv6 アドレスをサポートしているため、xmlhttprequest でサポートされています。