Socket.io在桌面chrome,chrome和firefox上完美运行,但在android和标准版和dev版(51)上都没有。
这是我的代码:
index.html:
<script src="/socket.io/socket.io.js"></script>
<script type="text/babel" src="scripts/messenger.js"></script>
messenger.js
var socket = io.connect('localhost:3000');
socket.on('chat message incoming', (msg) =>
this.incomingMessageHandler(JSON.parse(msg))
)
socket.emit('chat message outgoing', JSON.stringify(message));
我完成了与官方socket.io教程完全相同的一切。有什么想法发生了什么?
干杯,Wojtek
答案 0 :(得分:4)
好吧,看起来您正在连接到localhost:3000
,这可能不会指向您手机上的有效NodeJS服务器。尝试将该地址更改为运行应用程序的有效地址。此外,最好将协议(http://
)添加到地址。
答案 1 :(得分:0)
由于浏览器CORS policy
,我认为您无法通过Android手机的Chrome访问应用。 socket.io
尝试连接localhost:3000
,但是必须通过手机的浏览器连接到本地IP,例如:192.168.x.x
因此,由于这两个URL的主机不同,因此CORS策略会停止您的连接。
要解决此问题,您可以将cors dependency添加到您的应用中,如下所示:
const app = require('express')();
const cors = require('cors');
app.use(cors());
或者,您可以像这样设置'Access-Control-Allow-Origin'标头:
app.options('*', (req, res) => {
res.set('Access-Control-Allow-Origin', '*');
res.send('ok');
});
app.use((req, res) => {
res.set('Access-Control-Allow-Origin', '*');
});