在我的socket.io代码中,
socket.sockets.on('connection', function(client){
var ip = client.handshake.address.address;
..
}
Run Code Online (Sandbox Code Playgroud)
ip总是返回127.0.0.1,这是因为服务器位于代理后面.如何正确获取远程地址?
编辑:我正在使用http-proxy
var app = require("express")();
var server = require("http").Server(app);
var io = require("socket.io")(server);
var requestIp = require('request-ip');
server.listen(3000);
var ipMiddleware = function(req, res) {
return requestIp.getClientIp(req);
};
var ip = null;
app.get("/", function (req, res) {
ip = ipMiddleware(req, res);
res.sendFile(__dirname + "/index.html");
});
io.on("connection", function (socket) {
// send the ip to user
});
Run Code Online (Sandbox Code Playgroud)
我的问题是,我想用快递获取客户端的IP地址并向客户端发出ip地址,ips是不同的那么它应该是,我怎样才能发出我用快递得到的ip?谢谢
我最近在Heroku上使用Express和socket.io托管了我的第一个Node应用程序,需要找到客户端的IP地址.到目前为止,我已经尝试了socket.manager.handshaken[socket.id].address,socket.handshake.address并且socket.connection.address,两者都没有给出正确的地址.
应用程序:http://nes-chat.herokuapp.com/(还包含指向GitHub repo的链接)
要查看已连接用户的IP,请访问:http://nes-chat.herokuapp.com/users
谁知道问题是什么?
在node.js 4.x中,http.request 文档说这个函数
选项
- family:解析主机名和主机名时使用的IP地址族.有效值为4或6. 如果未指定,将使用IP v4和v6.
当family没有指定node.js选择ipv6或ipv4时,背后的逻辑是什么?
据我所知,当我没有指定它时,它默认为或更喜欢ipv4而浏览器,至少是chrome,更喜欢ipv6
有没有办法让node.js在可用时选择ipv6,还是我必须手动操作?
如果我是手动做的应该做什么?
传入family: 6,如果超时然后传入family: 4?
发出DNS请求并检查我是否收到了ipv6地址,然后设置系列?