Socket.io不适用于android chrome 51

时间:2016-04-14 12:53:24

标签: javascript android google-chrome websocket socket.io

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

2 个答案:

答案 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', '*');
});