dwh*_*ieb 5 javascript sockets node.js socket.io
我有两个子域名:
在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>
Run Code Online (Sandbox Code Playgroud)
但是,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与服务器建立初始连接时,它会发送一个withCredentials设置为true 的XHR .但您不能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']
});
Run Code Online (Sandbox Code Playgroud)必须在client(app.mydomain.com)上指定远程服务器和可接受的传输:
const socket = io('socket.mydomain.com', {
transports: ['websocket', 'xhr-polling']
});
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
3080 次 |
| 最近记录: |