我有两个子域:
在app.mydomain.com的登录页面中,我已链接Socket.IO客户端脚本,并成功创建了IO对象,如下所示:
<script src=https://socket.mydomain.com/socket.io/socket.io.js></script>
<script type=text/javascript>
const socket = io();
socket.on('message', data => console.log(data));
</script>
但是,socket.mydomain.com
客户端不是尝试连接,而是尝试连接app.mydomain.com
。由于处没有套接字app.mydomain.com
,因此它会失败并继续重试。
有没有办法将我的应用程序连接app.mydomain.com
到我的插座socket.mydomain.com
?还是这不可能?
更新资料
由于Socket.IO最近已升级到1.0(实际上是1.4),因此与此问题相关的大多数现有答案现在都使用过时的代码。然而,即使采取这些代码的变化考虑进去,它看起来像Socket.IO不允许我想要做的事。
当Socket.IO与服务器建立初始连接时,它将发送XHR,并将withCredentials
设置设置为true。但是您不能将其withCredentials
设置为true并在服务器上允许CORS。所以看来我的问题实际上是,“是否有办法解决这个问题?”
为了完成我想要的工作,需要正确配置几件事,并且需要使用最新的Socket.IO语法:
必须在socket.mydomain.com
服务器上启用CORS (Access-Control-Allow-Origin
标头设置为*
)
必须在服务器(socket.mydomain.com
)上指定可接受的传输:
const app = express();
const server = http.createServer(app);
const io = require('socket.io')(server, {
transports: ['websocket', 'xhr-polling']
});
必须在客户端(app.mydomain.com
)上指定远程服务器和可接受的传输:
const socket = io('socket.mydomain.com', {
transports: ['websocket', 'xhr-polling']
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句