文档详情

React hook实现简单的websocket封装方式.docx

发布:2025-05-12约5.65千字共8页下载文档
文本预览下载声明

React?hook实现简单的websocket封装方式

const[isLocalPage,setIsLocalPage]=useState(true)

???const{wsData,readyState,closeWebSocket,reconnect}=useWebsocket({

?????url:ws://ip:端口,//此参数为websocket地址

?????verify//此参数控制是否有权限,请求该方法

????})

???useEffect(()={

?????//不在白名单人员之间不执行后续操作,不需要可以删除

?????if(!verify){

?????????return

?????}

?????

?????//接受到socket数据,进行业务逻辑处理

?????if(Object.keys(wsData).length!==0){

????????console.log(wsData)

?????}

?????

?????//如果是已关闭且是当前页面自动重连

?????if(readyState.key===3isLocalPage){

??????reconnect()

?????}

?????//不是当前页面清空webSocket此处为优化代码使用的,不需要可以直接删除。

?????if(!isLocalPage){

??????closeWebSocket()

?????}

????},[wsData,readyState,isLocalPage,verify])

?}

对于isLocalPage感兴趣可以看下面代码是判断用户是否在当前页面。此方法可以放在useEffect。

/*

?**判断用户是否离开当前页面,离开后不请求轮询接口,回到当前页面重新执行轮询

useEffect(()={

???document.addEventListener(visibilitychange,function(){

?????//页面变为不可见时触发

?????if(document.visibilityState===hidden){

???????setIsLocalPage(false)

?????}

?????//页面变为可见时触发

?????if(document.visibilityState===visible){

???????setIsLocalPage(true)

?????}

???})

?})

最后,在这个代码中没有涉及到的场景就是心跳机制,一般简单的需求可以不考虑,这块逻辑实现上也比较简单,这里就不多加阐述了。

react自定义hook解决websocket连接,useWebSocket

react自定义hook,useWebSocket

1、描述

本来项目的告警和消息提醒是用的接口30秒调用一次,这次要改成webSocket传输。

因为前端是用的https,后端用的http,后端的socket只支持ws不支持wss,这里使用了webpack-dev-server的proxy代理了一下。

target:ws目标地址、pathRewrite:地址重写,这里是把/aapp_socket重写成aapp/websocket,ws:是否开启socket,secure:默认情况下不接收转发到https的服务器上,如果希望支持,可以设置为false,changeOrigin:是否跨域。差不多就这个意思

?/aapp_socket:{

????????target:`ws://xxx.xxx.xxx/`,

????????pathRewrite:{

??????????^/aapp_socket:aapp/websocket,

????????},

????????ws:true,

????????secure:false,

????????changeOrigin:true,

??????},

使用连接的地址:

`wss://localhost:3000/aapp_socket`;

实际

显示全部
相似文档