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)
我相信它应该是
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
不久前的内存服务...
您的服务器代码似乎很好.虽然您应该检查是否可以通过其他客户端连接到其套接字.
无论如何,尝试这个反应本机代码.
进口方式:
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。
祝你好运 :)