Cam*_*mel 27 javascript cross-domain websocket cors socket.io
是否可以以跨域方式使用Socket.IO?如果是这样,怎么样?网络上提到了这种可能性,但没有任何代码示例.
igo*_*orw 28
Socket.IO是否支持跨域连接?
绝对是,在每个浏览器上!
至于它是如何做到的:Native WebSockets是跨域设计的,socket.io提供用于跨域flash通信的flash策略文件,XHR2可以使用CORS,最后你总是可以使用JSONP.
Cha*_*mor 20
**Socket.IO版本 - > 1.3.7**
是否可以以跨域方式使用Socket.Io? 是的,一点没错.
如果是这样,怎么样?
选项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' ]);
Run Code Online (Sandbox Code Playgroud)
客户端
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);
Run Code Online (Sandbox Code Playgroud)
而已.问题?不适用于不支持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();
});
Run Code Online (Sandbox Code Playgroud)
而已.希望它可以帮助其他人.
vin*_*yll 17
只需在创建客户端套接字时插入远程域名:
var socket = io.connect('http://example.com:8080');
Run Code Online (Sandbox Code Playgroud)
Socket.io支持跨域连接,但请记住,您的cookie不会传递给服务器.你必须要么:
(1)提出备用识别方案(自定义令牌或javascript cookie) - 请记住,这不应该是实际的会话ID,除非你想让自己面临会话劫持的风险)
或者(2)首先向服务器发送一个好的旧式HTTP JSONP请求以获取cookie.然后它将通过套接字连接握手传输.
| 归档时间: |
|
| 查看次数: |
34024 次 |
| 最近记录: |