2015-06-24 42 views
2

這是奇特的。 Socket.io版〜1.3Socket.io握手地址值變化

io.sockets.on('connection', function (socket) { 
    console.log('Client connected from: ' + socket.handshake.address); 
} 

返回

客戶從連接::: 1

然而

io.sockets.on('connection', function (socket) { 
    console.log(socket.handshake); 
    console.log('Client connected from: ' + socket.handshake.address); 
} 

返回

{ headers: 
    { host: 'localhost:8000', 
    connection: 'keep-alive', 
    origin: 'http://localhost:3000', 
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTM 
L, like Gecko) Chrome/43.0.2357.130 Safari/537.36', 
    accept: '*/*', 
    dnt: '1', 
    referer: 'http://localhost:3000/dev.html', 
    'accept-encoding': 'gzip, deflate, sdch', 
    'accept-language': 'en-US;q=0.8,en;q=0.6,ko;q=0.4,de;q=0.2,ru;q=0.2,fr;q=0.2,ja;q=0.2,it;q=0.2', 
    cookie: 'io=yhyuAabou3GufhzNAAAA' }, 
    time: 'Wed Jun 24 2015 22:50:19 GMT+0200 (Central European Daylight Time)', 
    address: '::ffff:127.0.0.1', 
    xdomain: true, 
    secure: false, 
    issued: 1435179019584, 
    url: '/socket.io/?EIO=3&transport=polling&t=1435179017804-3', 
    query: { EIO: '3', transport: 'polling', t: '1435179017804-3' } } 
Client connected from: ::ffff:127.0.0.1 

爲什麼?有沒有一些ES6代理的方式?我想也許有一些奇怪的JS轉換魔法已經到位,但它看起來並不像它。

回答

2

::ffff:127.0.0.1127.0.0.1的IPv6版本,::1是兩者的IPv6快捷方式。

請參閱Express.js req.ip is returning ::ffff:127.0.0.1對於類似的問題。

+0

謝謝。你能否告訴我轉換髮生的地方,以及爲什麼只有當我轉儲整個握手對象時纔會發生?我儘可能https://github.com/joyent/node/blob/master/lib/net.js#L595,所以也許這是從console.log實施依賴? – Misiur

+0

我追蹤到https://github.com/joyent/node/blob/master/src/pipe_wrap.cc,但我的C++和OS API /管道知識還不夠。 – Misiur