我有两个子域:
- socket.mydomain.com - Socket.IO 服务器
- app.mydomain.com - 我想连接到我的网络套接字的网络应用程序。
在 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
?或者这是不可能的?
Update
大多数与此问题相关的现有答案现在都使用过时的代码,因为 Socket.IO 最近已升级到 1.0(实际上是 1.4)。然而,即使考虑到这些代码更改,它seems就像 Socket.IO 不允许我尝试做的事情。
当 Socket.IO 与服务器建立初始连接时,它会发送一个 XHRwithCredentials
设置设为 true。但你不能拥有withCredentials
设置为真and允许服务器上的 CORS。所以看来我的问题实际上是,“有办法解决这个问题吗?”
为了实现我想要的目标,需要正确配置几件事,并且我需要使用最新的 Socket.IO 语法:
必须启用 CORSsocket.mydomain.com
服务器 (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']
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)