反应本地和socket.io节点不工作

下面是我尝试连接到我的节点websocket后端的原始组件和节点server.js代码。

我的反应代码与服务器在同一台计算机上运行。 我在这里发现了很多不同的答案,而且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> ); } } 

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); }); 

我正在使用以下版本的软件包

 "expo": "^16.0.0", "react": "16.0.0-alpha.6", "react-native": "^0.43.4", "socket.io-client": "^1.7.3" 

       

网上收集的解决方案 "反应本地和socket.io节点不工作"

我相信应该是

 const io = require('socket.io-client'); 

哪个对我有效

我记得在使用反应本机时碰到这类问题。 许多socket.io教程(包括他们的页面上的教程)假定您正在使用HTML文档中通过脚本标记导入JS的较旧风格。 它看起来像socket.io改变了命名空间,因为我记得前socket.io-client/socket.iosocket.io-client/socket.io如果内存服务…

你的服务器代码似乎很好。 虽然你应该检查是否可以通过另一个客户端连接到它的套接字。

无论如何,尝试这个反应原生代码。

导入:

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!") }) } 

谢谢,彼得。 在我看来,你find的文章是没有用的,因为你正在尝试连接到服务于该页面的主机。 根据socket.io页面上的例子,尝试确保这一行工作: const io = require('socket.io-client/socket.io'); 并没有链接连接: let socket = io();

它为我工作,但只在同一台计算机上的浏览器。 我想当你要在设备上testing时,你必须指定你的IP而不是localhost。

祝你好运 :)