2017-06-15 55 views
1

我试图设置一个Websocket客户端,通过JSON与websever进行通信。我在网上找不到任何好的例子。反应原生Websocket JSON通信

我只找到这段代码在线:

var ws = new WebSocket('ws://host.com/path'); 

ws.onopen =() => { 
    // connection opened 
    ws.send('something'); // send a message 
}; 

ws.onmessage = (e) => { 
    // a message was received 
    console.log(e.data); 
}; 

ws.onerror = (e) => { 
    // an error occurred 
    console.log(e.message); 
}; 

ws.onclose = (e) => { 
    // connection closed 
    console.log(e.code, e.reason); 
}; 

我不知道如何将这种代码集成到我的应用程序代码的功能。 我是否需要为它安装一些软件包? 我正在为我的研究做一个项目,最后我应该有一个Quiz-App,它连接到服务器以获取游戏的问题和答案。

感谢您的帮助!

回答

0

你不需要其他任何东西来处理反应原生WebSocket(或任何相对较新的JS环境for that matter)。你找到的例子几乎涵盖了你需要开始的任何事情。下一步是将其绑定到您的React逻辑。例如,您可以创建一个WebSocketController组件,它看起来(详细内容略)这样

class WebSocketController extends React.Component { 
    componentDidMount(){ 
    this.ws = new WebSocket('ws://host.com/path'); 
    this.ws.onmessage = this.handleMessage.bind(this); 
    this.ws.onerror = //... 
    } 
    handleMessage(e){ 
    // dispatch event (á la redux, flux), or do something else 
    } 
    componentWillUnmount(){ 
    // close WS 
    } 
} 

你的阵营层级内渲染这一点,它会将您的其余部件开始。如果你需要更具体的东西,让我们知道。

+0

我在handleMessage(e)方法中使用console.log(e.data)实现了您的代码,以查看它是否正常工作,但出现此错误:错误包装程序无法侦听端口8081 最有可能是另一个进程已在使用此端口 运行下面的命令找出哪个进程: lsof的-i:8081 然后,您可以关闭其他程序: 杀-9 或在不同的运行打包港口。 – Hang

+0

这是一个不同的错误,通常通过检查lsof的输出来修复。可能你有另一个运行在那里的打包程序实例。 – martinarroyo

+0

好吧,这个错误不再存在,但是当我尝试用console.log(e.data)实现的代码运行我的应用程序时,它不会在控制台上显示任何内容。在我的IDE Webstorm控制台中,它与此消息交替[intellij]建立与代理(包装程序)到React Native应用程序 到此消息的连接 [intellij]从代理(包装程序)断开连接到React Native应用程序。尽快重新尝试重新连接... – Hang