Сделал простой сервак, проверил connect и emit, все работает. Потом сделал попытку подключится и отправить сообщение через react-native, но в консоли сервера не написало ни подключения ни сообщения. На простой html странице я подключался так:
var socket = io('http://localhost:3000/');
в react-native не сработало. Потом решил использовать подключение с использованием
ws, но тоже не помогло. В чем проблема?
NODE
io.on('connection', function(socket){
console.log('an user connected');
socket.on('chat message', function(msg){
console.log('message: ' + msg);
});
socket.on('disconnect', function(){
console.log('user disconnected');
});
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
HTML
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", ready);
function ready() {
var socket = io('http://localhost:3000/');
setInterval(() => {
socket.emit('chat message', "$('#m').val()");
}, 3000);
}
</script>
REACT-NATIVE
import React, { Component } from "react";
import { View, Text } from "react-native";
export default class RemoteControl extends Component {
constructor(props) {
super(props);
this.state = {
open: false,
connected: false
};
this.socket = new WebSocket('ws://10.0.2.2:3000/');
this.socket.onopen = () => {
this.setState({connected:true})
};
}
emit = () => {
if( this.state.connected ) {
this.socket.send("chat message")
this.setState(prevState => ({ open: !prevState.open }))
}
}
componentDidMount() {
this.socket.onopen = () => this.socket.send(JSON.stringify({type: 'chat message', payload: 'Hello Mr. Server!'}));
this.socket.onmessage = ({data}) => console.log(data);
}
render() {
return (
<View>
<Text>Remote control page</Text>
</View>
);
}
}