其实单纯的靠socket.io去访问跨域是可行的,出问题的是session,也就是cookie
你socket.io服务端
io.set('authorization’, function (handshakeData, callback) {
/***
}
肯定有这个认证,一旦跨域,handshakeData.headers.cookie是获取的服务器域的cookie.
而express的session管理也是将cookie记录在服务端里的,只有你访问服务端域的时候,cookie才会生成,这时才有所谓的session。
app.use(session({
resave: true,
saveUninitialized: true,
secret: config.session_option.secret,
cookie: {maxAge: 1000 * 60 * 60 * 24 * 1},
store: storeMemory
}));
在你服务端没有cookie记录的时候(默认为connectsid),直接通过客户端socket.io去远程链接是生成不了cookie的,同时也就获取不到,在认证这块就出了问题,所以就走不通。