gpt4 book ai didi

Node.js - Socket.io : socket. 请求未定义

转载 作者:太空宇宙 更新时间:2023-11-03 22:00:33 25 4
gpt4 key购买 nike

我已阅读here我可以在node.js中获取客户端的IP

socket.request.connection.remoteAddress

例如:

var socket = io.listen(server);
socket.on('connection', function(client){
var client_ip_address = socket.request.connection.remoteAddress;
}

但是当我使用此解决方案时,我收到错误消息“无法读取未定义的属性‘连接’”,这意味着 socket.request 未定义。

为什么会这样?

我还尝试了在同一页面上找到的另一个选项:

var sHeaders = socket.handshake.headers;
console.info('[%s:%s] CONNECT', sHeaders['x-forwarded-for'], sHeaders['x-forwarded-port']);

但这只是输出

[undefined:undefined] CONNECT

最佳答案

我刚刚在我的计算机上尝试了类似的操作,它返回了 127.0.0.1,这是正确的:

var express = require('express');
var io = require('socket.io');
var path = require('path');

var app = express();
var server = http.createServer(app);
var ioServer = io.listen(server);

ioServer.sockets.on('connection', function (socket) {
console.log(socket.request.connection.remoteAddress);
// This gave 127.0.0.1
});

代码中的socket不是客户端套接字连接,而是“服务器”本身,因此它没有request属性是正常的。使用我编写的代码或尝试更改:

socket.on(

至:

socket.sockets.on(

和:

socket.request.connection.remoteAddress

至(对于 Express v4.x、Socket.IO v1.x):

client.request.connection.remoteAddress

或(对于 Express v3.x、Socket.IO v0.x) (这显然返回服务器 IP):

socket.handshake.address

它应该可以满足您的需求。

编辑:如果我没记错的话,socket.io版本<1.x不使用client.request而是使用 client.handshake 所以尝试一下。

要升级express和socket.io,请检查这两个链接:

关于Node.js - Socket.io : socket. 请求未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26802808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com