【问题标题】:Socket.io doesn't work on android chrome 51Socket.io 在 android chrome 51 上不起作用
【发布时间】:2016-04-14 12:53:23
【问题描述】:

Socket.io 在桌面 chrome、chromium 和 firefox 上完美运行,但在标准版和 dev(51) 的 android 版 chrome 上却无法正常运行。

这是我的代码:

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 教程中的完全一样。有什么想法吗?

干杯,沃伊泰克

【问题讨论】:

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


    【解决方案1】:

    好吧,您似乎正在连接到localhost:3000,它可能未指向您手机上的有效 NodeJS 服务器。尝试将该地址更改为您的应用程序正在运行的有效地址。此外,最好将协议(http://)添加到地址中。

    【讨论】:

    • 我说的是var socket = io.connect('localhost:3000');。我很难相信这部分可以在你的安卓设备上运行。
    【解决方案2】:

    我认为由于浏览器的CORS policy,您无法从 Android 手机的 chrome 访问您的应用。 socket.io 尝试连接 localhost:3000,但您必须通过手机的浏览器连接到本地 IP,如下所示:192.168.x.x

    因此,CORS 策略会停止您的连接,因为这两个 URL 的主机不相同。

    要解决此问题,您可以将 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', '*');
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 2016-10-26
      • 2014-12-24
      相关资源
      最近更新 更多