React项目中实现websocket

本文介绍了在React项目中实现WebSocket通信的需求和方法。通过解决HTTP协议的缺陷,利用WebSocket实现服务器主动向客户端推送信息。文章详细阐述了WebSocket协议、常见应用场景,并展示了聊天机器人的整体思路和代码实现,包括建立连接、发送接收消息的流程。
摘要由CSDN通过智能技术生成

问题

如何让服务器主动给客户端发请求?

HTTP协议(ajax)的缺陷

WebSocket 是一种数据通信协议,类似于我们常见的 http 协议。

初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?

答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起。http基于请求响应实现。

举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。

这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息。最典型的场景就是聊天室。

轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。因此,工程师们一直在思考,有没有更好的方法。WebSocket 就是这样发明的。

image.png

websocket简介

React 实现 WebSocket 连接的方法与在普通的 JavaScript 实现类似,但需要注意一些细节。 以下是一个在 React 使用 WebSocket 连接的示例代码: ```javascript import React, { useState, useEffect } from 'react'; function App() { const [socket, setSocket] = useState(null); useEffect(() => { const ws = new WebSocket('ws://localhost:8080'); ws.onopen = function(event) { console.log('WebSocket 连接成功'); }; ws.onmessage = function(event) { console.log('接收到消息:', event.data); }; ws.onclose = function(event) { console.log('WebSocket 连接关闭'); }; setSocket(ws); return function cleanup() { ws.close(); }; }, []); function sendMessage() { if (socket) { socket.send('Hello, WebSocket!'); } } return ( <div> <button onClick={sendMessage}>发送消息</button> </div> ); } export default App; ``` 在上述代码,我们使用了 `useState` 钩子函数来管理 WebSocket 对象,使用 `useEffect` 钩子函数来创建 WebSocket 连接,并在组件销毁时关闭连接。当用户点击发送消息的按钮时,`sendMessage` 函数将向服务器发送消息。 需要注意的是,在使用 `useState` 管理 WebSocket 对象时,初始值应为 `null`。这是因为在组件挂载时,WebSocket 对象还没有创建,此时应将 `socket` 状态设置为 `null`,表示 WebSocket 连接还未建立。而在 `useEffect` 创建 WebSocket 对象后,我们应在回调函数将其保存到 `socket` 状态,从而更新组件的状态。 另外,我们在 `sendMessage` 函数增加了对 `socket` 变量的判断,这是因为在组件挂载时,WebSocket 连接还未建立,此时 `socket` 变量的值为 `null`,无法发送消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值