React native和socket.io节点无法正常工作

pet*_*gan 18 javascript websocket node.js socket.io react-native

下面是我的反应本机组件和节点server.js代码,我试图连接到我的节点websocket后端.

我的反应代码与服务器在同一台计算机上运行.我在这里找到了很多不同的答案,而github,我都无法工作.

我也发现这个问题从来没有得到解答,这个问题有一个答案,我无法工作(一年前被问过)

我找到了这篇文章,并尝试根据这些指南修改我的代码,但这不起作用.

反应代码

import React from 'react';
import { StyleSheet, Text, View, Image } from 'react-native';

const io = require('socket.io-client/socket.io');
let socket = io('http://localhost:3000');

export default class App extends React.Component {

    constructor(props) {
        super(props);
        console.log(socket);
    }

    render() {
        return (
            <View>
                <Text>Websocket</Text>
            </View>
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

server.js

const express = require('express');
const http = require('http')
const socketio = require('socket.io');

const app = express();
const server = http.Server(app);
const websocket = socketio(server);
server.listen(3000, () => console.log('listening on *:3000'));

console.log(websocket)

// The event will be called when a client is connected.
websocket.on('connection', (socket) => {
  console.log('A client just joined on', socket.id);
});
Run Code Online (Sandbox Code Playgroud)

我使用的是以下版本的软件包

"expo": "^16.0.0",
"react": "16.0.0-alpha.6",
"react-native": "^0.43.4",
"socket.io-client": "^1.7.3"
Run Code Online (Sandbox Code Playgroud)

klv*_*lvs 6

我相信它应该是

const io = require('socket.io-client');
Run Code Online (Sandbox Code Playgroud)

哪个对我有用.

我记得在使用react native时会遇到这些问题.很多socket.io教程(包括他们页面上的那篇)假设你使用的是旧式的HTML文档中的脚本标签导入JS.看起来socket.io改变了名称空间,因为我记得它是socket.io-client/socket.io不久前的内存服务...


Kai*_*ang 5

您的服务器代码似乎很好.虽然您应该检查是否可以通过其他客户端连接到其套接字.

无论如何,尝试这个反应本机代码.

进口方式:

import io from 'socket.io-client/socket.io'

在您的组件中执行:

componentDidMount () {
    const socket = io(YOURURL, {
      transports: ['websocket']
    })

    socket.on('connect', () => {
      console.log("socket connected")
      socket.emit('YOUR EVENT TO SERVER', {})
      socket.on('EVENT YOU WANNA LISTEN', (r) => {
      })
    })

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

    socket.on('disconnect', () => {
      console.log("Disconnected Socket!")
    })
  }
Run Code Online (Sandbox Code Playgroud)


Yev*_*huk -1

谢谢,彼得。在我看来,您找到的文章没有帮助,因为您正在尝试连接到为该页面提供服务的主机。根据socket.io页面上的示例,尝试确保此行有效: const io = require('socket.io-client/socket.io');并在没有链接的情况下连接:let socket = io();

它对我有用,但仅限于同一台计算机上的浏览器。我认为当你在设备上测试时,你必须指定你的 IP 而不是 localhost。

祝你好运 :)