gpt4 book ai didi

javascript - express + socket.io 跨域

转载 作者:搜寻专家 更新时间:2023-11-01 00:01:42 25 4
gpt4 key购买 nike

我如何为 express.io 启用跨域,因为我需要一个 cordova 应用程序,chrome 说“请求的资源上没有'Access-Control-Allow-Origin' header 。Origin”,这是我的代码。

服务器

var app = require('express.io')();
app.http().io()

app.listen(2000);
app.io.set('origins', '*:*');
app.io.set('transports', [
'websocket'
, 'flashsocket'
, 'htmlfile'
, 'xhr-polling'
, 'jsonp-polling'
]);

app.get('/', function (req, res) {
res.setHeader('Access-Control-Allow-Origin','*');
res.send(200, 'Todo fino');

req.io.route('connection');
});

app.io.route('connection', function (req) {
console.log('User connected');
});

客户

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="https://cdn.socket.io/socket.io-1.3.3.js"></script>
<script>
var socket = io.connect('http://localhost:2000');

</script>
<title>Document</title>
</head>
<body>
Probando Socket system
</body>
</html>

最佳答案

我从未使用过它,但这是我分别使用 Express 和 Socket.io 进行设置的方式。

**Socket.IO 版本 --> 1.3.7 ****Express 版本 --> 4.13.3 **

选项 1:强制仅使用 Websockets

默认情况下,websockets 是跨域的。如果您强制 Socket.io 仅将其用作连接客户端和服务器的方式,那么您就可以开始了。

服务器端

//HTTP Server 
var server = require('http').createServer(app).listen(8888);
var io = require('socket.io').listen(server);

//Allow Cross Domain Requests
io.set('transports', [ 'websocket' ]);

客户端

var connectionOptions =  {
"force new connection" : true,
"reconnectionAttempts": "Infinity", //avoid having user reconnect manually in order to prevent dead clients after a server restart
"timeout" : 10000, //before connect_error and connect_timeout are emitted.
"transports" : ["websocket"]
};

var socket = io("ur-node-server-domain", connectionOptions);

就是这样。问题?不适用于不支持 websockets 的浏览器(对于客户端)。有了这个,你几乎可以扼杀 Socket.io 的魔力,因为它逐渐从长轮询开始,然后升级到 websockets(如果客户端支持的话)。

如果您 100% 确定您的所有客户端都将使用 HTML5 兼容浏览器访问,那么您就可以开始了。

选项 2:在服务器端允许 CORS,让 Socket.io 处理是使用 websockets 还是长轮询。

对于这种情况,您只需调整服务器端设置即可。客户端连接与往常一样。

服务器端

//HTTP Server 
var express=require('express');
//Express instance
var app = express();

//ENABLE CORS
app.all('/', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});

就是这样。希望对其他人有帮助。

ps:这是我对另一个问题Cross-domain connection in Socket.IO的回答的转载

关于javascript - express + socket.io 跨域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28434790/

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