嘗試
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 -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/');
我的/ etc/hosts包含條目::1 ip6-localhost
,所以如果你的主機名只指向IPv6地址,這應該可以工作。 (如果第一個連接不起作用,它不會回退到另一個地址,因此使用localhost作爲名稱,它不會從IPv4回退到IPv6)。
可悲的是它看起來像URL的NodeJS模塊(至少在Debian版本0.6.19)不支持文本地址,因此既做了XMLHttpRequest模塊:
console.log(require('url').parse('http://[::1]:8124/'));
的socket.io-客戶端模塊不支持文本地址要麼,但你可以欺騙它是這樣的:
require('socket.io-client').connect('http://blank:8124/', {host:'[::1]'});
這將使用XMLHttpRequest作爲後端的,因此它仍然無法正常工作的NodeJS(也許它與一個「真正的「瀏覽器中的XMLHTTPRequest對象或更新的節點j s版本)。
更新:最近的節點版本(試過v0.9.6-16-g9668df8)支持的URL語法分析器,因此在XMLHttpRequest的文字IPv6地址。
謝謝Stefan。這似乎讓服務器去,但我無法從客戶端連接到它。沒有錯誤正在輸出......不知道爲什麼。你能否通過Node.js客戶端連接到服務器? – Brad
@Brad hm,正確 - 客戶端看起來比服務器更壞。我更新了答案。 – Stefan
按主機名工作!謝謝你的幫助! – Brad