【问题标题】:Expo with socket.io websocket failing to connect带有socket.io websocket的博览会无法连接
【发布时间】:2018-12-06 11:41:45
【问题描述】:

我正在尝试从 Expo 应用程序中连接到 socket.io 服务器。我无法连接到我的服务器时遇到问题。我有一个可以很好地连接到服务器的 Web 应用程序,因此服务器工作正常。我还查看了一些示例,包括 Expo repo 中的一个示例,但均无济于事。

我的客户:

componentDidMount() {

    const socket = socketIOClient('http://192.168.1.210:80', {
      transports: ['websocket']
    });

    socket.on('connect', () => {
      console.log('Connected.');
    });

    socket.on('connect_error', (err) => {
      console.log(err);
    });
}

服务器:

this.httpServer = HttpServer.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.end('');
});

this.httpServer.listen(80);

this.io = new IOServer({
  pingInterval: 10000,
  pingTimeout: 5000,
});

this.io.listen(this.httpServer);
this.io.set('transports', ['websocket']);

this.onConnection();

this.io.on('connection', (socket) => {/* events */}

on connect 事件永远不会触发,只有 connect_error 事件只是简单地说“超时”。在针对 https://www.websocket.org/echo.html 进行测试时,本机 websocket 可以正常工作。

【问题讨论】:

  • 我听说有人对 socket.io 也有问题。启用远程调试使其对他有用。但他不知道为什么。

标签: javascript react-native socket.io expo


【解决方案1】:

这是 socket.io 的一个错误,与加载不正确的 WebSocket 实现有关。

它一直在寻找 self.WebSocket,但 self 在 React Native 中不存在,所以它回退到 require('ws'),Node.js 实现。实际上,它应该一直使用 React Native 中的原生 WebSocket 实现。

我做了一个 PR 来解决这个问题:https://github.com/socketio/engine.io-client/pull/607

打开远程调试使其工作的原因是代码在这种模式下运行在浏览器(Chrome)中,它能够使用浏览器的WebSocket实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 2018-10-20
    • 2021-04-26
    • 2018-12-23
    • 1970-01-01
    相关资源
    最近更新 更多