gpt4 book ai didi

node.js - socket.io 不断尝试在错误的地址上使用轮询

转载 作者:搜寻专家 更新时间:2023-10-31 22:35:24 25 4
gpt4 key购买 nike

嘿,我正在尝试跨域使用 socket.io。例如,假设域是:https://client.domain.comhttps://server.domain.com .我的客户端代码如下所示:

socket = io.connect("https://server.domain.com");
socket.on("connect", function () {
console.log("socketio Connected to server!");
});
socket.emit("test", {"test":"test"});

和服务器端:

var fs = require('fs');
var https = require('https');
var express = require('express');
var socketIO = require('socket.io');
var app = express();

// Settings
var serverOptions = {
key: fs.readFileSync('privkey1.pem'),
cert: fs.readFileSync('cert1.pem')
};

var serverPort = 443;

// Logic
var server = https.createServer(serverOptions, app);
var io = socketIO(server);

io.on('connection', function(socket) {
socket.on("test", function(data) {
console.log(data);
});
});

server.listen(serverPort, function() {
console.log('server up and running at %s port', serverPort);
});

一切正常,消息来回发送。但是一些原因 socket.io 一直试图在错误的域上使用轮询。几乎每一秒我都会看到这些请求:

Request URL:https://client.domain.com/socket.io/?EIO=3&transport=polling&t=1452418594321-145
Request Method:GET
Status Code:302 OK

为什么 socket.io 这样做,我该如何关闭它?

编辑:更有趣的是,如果我注释掉所有与 socket.io 有关的代码,只留在 <script src="https://server.domain.com/socket.io/socket.io.js"></script> 中它仍然不断发出前面描述的这些 HTTP 请求。

EDIT2:不确定这是否会产生任何影响,但实际上域不是一个域的子域。他们是 https://clientdomain.comhttps://serverdomain.com .

最佳答案

如果您使用的是 nginx,我认为您的问题出在您的配置方式上。如 socket.io docs 中所述,您绝对需要在 location block 中添加以下内容

确保正确设置了这些 header :

location / {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;

...
}

Socket.IO 可以很好地处理 CORS,所以我怀疑问题出在这里。

关于node.js - socket.io 不断尝试在错误的地址上使用轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34704056/

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