我听说在React Native中Socket.io无法正常工作,因此我决定改用普通的WebSocket。
我正在使用node.js来实现WebSocket服务器,这并不难。在浏览器中,我尝试的所有方法都可以正常工作,但在React Native中,没有一种方法成功。
这是我尝试实现WebSocket服务器的方法:
- express-ws
- ws
express-ws根本无法工作,没有任何错误消息。它只是说连接失败了。
所以我把模块改成了ws,这个模块需要在客户端和服务器端都引入,所以我这样做了。服务器可以正常工作,但是在使用安卓模拟器的应用程序中,它会显示:
需要未知模块“url”。如果您确定该模块存在,请尝试重新启动打包程序或运行“npm install”。
所以我完全删除了node_modules目录并重新安装了它们,但是仍然出现了相同的错误。
我正在使用node v6.2.2,react-native-cli 1.0.0,react-native 0.33.0。
这是使用ws模块的服务器代码(与ws模块自述文件相同):
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({ port: 3000 });
wss.on('connection', (socket) => {
socket.on('message', (msg) => {
console.log('Received: ' + msg);
});
socket.send('something');
});
这是客户端:
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View
} from 'react-native';
const WebSocket = require('ws');
class wschat extends Component {
constructor() {
super();
}
componentDidMount() {
var socket = new WebSocket("ws://localhost:3000");
socket.on('open', () => {
socket.send('something');
});
socket.on('message', (data, flags) => {
console.log(data);
console.log(flags);
});
}
...
为了避免命名冲突,在需要ws模块时我使用了WebSock而不是WebSocket,但这并不是问题。
我有什么遗漏的吗?React Native文档没有太多的解释,而且很难找到可行的示例。感谢您的阅读,任何建议都将非常感激。
const WebSocket = require('ws')
,因为 WebSicket 在 RN 中是默认提供的。如果有效请让我知道。 - MTolocalhost:3000
,但后来发现我的后端并没有运行在设备的localhost
上,而是在我的电脑的localhost
上。当我将其替换为本地 IP 地址后,就解决了这个问题。 - Jessy