当前位置: 首页 > 知识库问答 >
问题:

如何在react-native应用程序中使用自己的代理与TCP://uri?

孟璞
2023-03-14

下面是我的app.js:

import React, { Component } from 'react';
import {
  Platform,
  StyleSheet,
  Text,
  View,
  TouchableHighlight,
  TextInput,
  Button
} from 'react-native';

import { Client, Message } from 'react-native-paho-mqtt';

const instructions = Platform.select({
  ios: 'Press Cmd+R to reload,\n' +
    'Cmd+D or shake for dev menu',
  android: 'Double tap R on your keyboard to reload,\n' +
    'Shake or press menu button for dev menu',
});

export default class App extends Component<{}> {
  constructor(){
    super();
    const myStorage = {
      setItem: (key, item) => {
        myStorage[key] = item;
      },
      getItem: (key) => myStorage[key],
      removeItem: (key) => {
        delete myStorage[key];
      },
    };


    const client = new Client({ uri: "wss://m12.cloudmqtt.com:31839/", clientId: 'clientIdReactNative' + (new Date()).getTime(), storage: myStorage });
    client.on('messageReceived', (entry) => {
      console.log(entry);

      this.setState({message: [...this.state.message, entry.payloadString]});
    });

    client.on('connectionLost', (responseObject) => {
      if (responseObject.errorCode !== 0) {
        console.log(responseObject.errorMessage);
        this.setState({error: 'Lost Connection', isConnected: false});
      }
    });
    this.connect(client)
        .then(() => {
          console.log('connect!');
          this.setState({isConnected: true, error: ''})
        })
        .catch((error)=> {
          console.log(error);
        });


    this.state = {
      client,
      message: [''],
      messageToSend:'',
      isConnected: false
    }
  }

  connect(client){
    return client.connect({
      useSSL: true,
      userName: 'azebvdny',
      password: 'MsULac9Uhig0'
    })
    .then(() => {
      client.subscribe('S/ReactMQTT');
    })

  }

  onConnect = () => {
    const { client } = this.state;
    client.subscribe('ReactMQTT');
    this.pushText('connected');
  };
  pushText = entry => {
    const { message } = this.state;
    this.setState({ message: [...message, entry] });
  };

  onConnectionLost(responseObject) {
    if (responseObject.errorCode !== 0) {
      console.log("onConnectionLost:"+responseObject.errorMessage);
    }
  }

  onMessageArrived(message) {
    console.log("onMessageArrived:"+message.payloadString);
  }

  componentWillMount(){

  }
  sendMessage(){
    var message = new Message(this.state.messageToSend);
    message.destinationName = "S/ReactMQTT";

    if(this.state.isConnected){
      this.state.client.send(message);
    }else{
      this.connect(this.state.client)
        .then(() => {
          console.log('connect!');
          this.state.client.send(message);
          this.setState({error: '', isConnected: true});
        })
        .catch((error)=> {
          console.log(error);
          this.setState({error: error});
        });

    }

  }
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.welcome}>
          Welcome to React Nativess!
        </Text>
        <Text style={styles.instructions}>
          Message: {this.state.message.join(' --- ')}
        </Text>
        <Text style={{color: 'red'}}>
          {this.state.error}
        </Text>
        { this.state.isConnected ?
            <Text style={{color: 'green'}}>
              Connected
            </Text> : null
        }
        <TextInput
          value={this.state.messageToSend} 
          onChangeText={(value => this.setState({messageToSend: value}))} 
          placeholder="Type here... "
          style={styles.input} />
        <Button onPress={this.sendMessage.bind(this)} title="Send Message" />

      </View>
    );
  }
}

const styles = StyleSheet.create({
  ...
});

任何帮助都将不胜感激。

共有1个答案

陶俊晤
2023-03-14

react-native-paho-Mqtt只支持WebSocket。

因为react-native-paho-Mqtt不支持开箱即用的原始TCP

如果您使用real-native-tcp来配置客户端,那么在代码上是可能的。

js prettyprint-override">  test('should fail to create a new client with an invalid ws uri', function () {
    let client = null;
    let error;
    try {
      client = new Client({ uri: 'http://example.com', clientId: 'testclientid', webSocket, storage });
    } catch (err) {
      error = err;
    }
    expect(client).toBe(null);
    expect(error).not.toBe(null);

 类似资料:
  • 我用react-native做了一个移动应用程序(目前只有Android系统,它不是一个世博会应用程序),我想禁止用户在应用程序打开时截图。我知道这是不可能完全禁用这一点,但我想使它至少更难采取截图。我发现了一些示例,但我不知道如何实现它们,例如: 如何在Android中防止截屏 有人知道如何设置一个标志,这样我的react-native(android)应用程序的用户在使用该应用程序时就不能截图

  • 问题内容: 我想将node js用作react native项目中的后端。 问题答案: 是的,您 可以 通过正确使用Big Rich的ReactNativify 来 使用为Node编写的包。但是要考虑一些事项: 1)我遵循在问题清单中找到的建议,并分为两部分: Transformers.js(在和中调用): babel-transformer.js(也在): 2)如您在上面的代码中所见,我还演示了

  • 在React Native应用程序中实现以下场景的最佳方式是什么? 向服务器发出HTTP请求,获取JSON响应和ETag头 保存此JSON响应的方式即使在用户重新启动应用程序后也会持续 每当重复此HTTP请求时,发送If-None-Match头。 当您得到“未修改”响应时,请使用持久化缓存中的版本 当您得到“成功”响应(表示响应已更改)时,使持久化缓存无效,保存新响应 React Native有现

  • 我正在尝试设置一个Java程序,其中每个线程都可以使用自己的代理。 现在我只找到了一种全局设置代理的方法。(http://docs.oracle.com/javase/6/docs/technotes/guides/net/proxies.html) 如前所述,这些设置会影响使用这些选项调用的VM的整个生命周期内的所有http连接。然而,使用该系统是可能的。setProperty()方法,使其具有

  • 问题内容: 如果我的React Native应用无法连接到其后端,我会显示一个带有OK按钮的Alert。如果发生这种情况,应用程序将无法继续运行,因此我想在单击按钮时将其关闭。我该怎么做呢? 我怀疑密钥在AppRegistry中,但是文档有点匮乏。 问题答案: 今天没有反应本机的特定方法。您必须从事物的本机方面完成此任务。 此外,您正在为iOS开发吗?苹果已经表示,应用程序不应自行关闭。

  • 我听说Dart使用自己的DartVM。因此,Flatter可以在开发应用程序时使用JIT(用于热重新加载)和AOT将后者构建为“原生”应用程序(.apk/.ipa)。 根据两个平台(Android/iOS)的文档: 提前(AOT)编译到本机ARM库中 但是,如果应用已经通过Dalvik/ART运行,那么Flatter如何在Android上使用自己的DartVM呢?虚拟机是否已内置到我们的系统中。a