React-native socket.io发射/不触发动作

时间:2018-12-10 16:17:57

标签: react-native socket.io-1.0

我正在使用涉及socket.io的React-native应用程序。我已经成功安装了socket.ion并将其导入到我的组件中,例如:

import React, { Component } from 'react';
import io from 'socket.io-client/dist/socket.io';
const connectionConfig = {
    jsonp: false,
    reconnection: true,
    reconnectionDelay: 100,
    reconnectionAttempts: 100000/// you need to explicitly tell it to use websockets
  };
  socket = io('http://192.168.1.100:3001', connectionConfig);
type Props = {};
export default class Socket extends Component<Props> {
    constructor(){
    super();
    socket.emit("Button",'pressed')
    socket.on('userid',(id)=>{
      this.setState({userid:{id}});
      Alert.alert(id);
    })
  }

服务器端使用express的代码是:

io.on('connection', function(socket){
  console.log(socket.id);
  socket.on('Button',function(data){
    console.log("ButtonPressed");
  });
 socket.emit('userid',socket.id);

}) 奇怪的是,每隔1.5秒,当我在Android设备上运行应用程序时,服务器控制台就会记录一个不同的socket.id。我假设socket.io连接成功,但是在提到的1.5si中再次断开连接,这样就不会执行socket.emit和socket.on事件了。我尝试了提供的许多选项,但无法获得正确的方法来解决此问题。如果您知道解决方法,请多多关照。谢谢。

1 个答案:

答案 0 :(得分:0)

我在android上意识到,如果您使用以下选项传输:['websocket']并且您处于开发模式,那么首先通过摇动手机远程启用调试,插座将对您正常工作。所以基本上你应该有类似的东西

   import io from 'socket.io-client';
const connectionConfig = {
    jsonp: false,
    reconnection: true,
    reconnectionDelay: 100,
    reconnectionAttempts: 5000,
    transports: ['websocket']/// you need to explicitly tell it to use websockets
  };
  socket = io('http://192.168.1.100:3001', connectionConfig);