套接字.Io-client在react-native中使用时保持连接



我想在我的RN项目中使用websocket。我使用ws在服务器端和RN内置的websocket实现。但似乎不太方便,因为我使用插座。io。所以我尝试使用socket.io:在RN:

import './userAgent'
import io from "socket.io-client/socket.io"
在组件:

    componentDidMount() {
     this.socket = io('https://localhost:4080',{jsonp: false});
     this.socket.on('hello', (msg) =>{
       this.setState({response:msg})
     });
    }

服务器端:

  io.on('connection', function(socket){
   socket.emit('hello','hello world')
   console.log('a user connected');
   socket.on('disconnect',function(){
     console.log('user disconnected')
   })
  })

和userAgent.js

window.navigator.userAgent = 'react-native';

这只是我谷歌的结果,他们说它会工作。但对我来说,chrome调试器停在:

function load() {
 var r;
 try {
  r = exports.storage.debug;
 } catch(e) {}
 return r;
}

表示存储空间没有定义。然后我查看了socket.io.js,发现导出。存储是window.localStorage。所以我禁用了远程js调试,代码开始运行。

但是服务器继续记录:一个用户已连接。好像我的RN应用程序一直连接到服务器。似乎socket.on()在客户端不起作用。

react-native版本:0.27.2

插座。io-client版本:1.4.8

有谁知道哪里出错了吗?

嗯,最后我找到了解决方案后,通过套接字。io来源。似乎插座。IO默认不使用'websocket'作为传输。在我的例子中,它将使用'polling',所以只需显式地设置它:

 componentDidMount() {
    var socket = io('http://localhost:4080', { jsonp: false, transports: ['websocket'] })
    socket.on('hello', (msg) => {
       //do something
    });
}

现在它工作了。但仍然让我困惑的是,在浏览器客户端,我没有设置传输,它只是工作得很好,但在react-native它没有。不知道为什么

相关内容

  • 没有找到相关文章

最新更新