React+Websocket简单实例

简介: 最近很多项目需要用到websocket,经过智能客服项目沉淀了一个简单的实例,以后可以直接用。有需要指教的地方可以联系我。

页面:

import React,{useEffect} from 'react'
import { PubSub } from 'pubsub-js';
import {createWebSocket,closeWebSocket,websocket} from './websocket';

function Ws(){
    
useEffect(() => {
    let url="ws://123.207.136.134:9010/ajaxchattest";//服务端连接的url
        createWebSocket(url)
        let messageSocket=null;
        messageSocket = PubSub.subscribe('message',getMsg)
        //在组件卸载的时候,关闭连接
         return ()=>{
            PubSub.unsubscribe(messageSocket); 
            closeWebSocket();
        }
}, []);

const sendMsg=()=>{
    let msg='发送消息'
    websocket&&websocket.send(msg)
    console.log('ws发送')
}

const getMsg=(topic,message)=>{
    console.log('ws获取:',message)
}
    return(
        <div>
            <button onClick={sendMsg}>发送消息</button>
            <button onClick={closeWebSocket}>关闭连接</button>
        </div>
    )
}

export default Ws

Websocket JS文件:

import { PubSub } from 'pubsub-js';
let websocket,
  lockReconnect = false;
let createWebSocket = (url) => {
  websocket = new WebSocket(url);
    console.log('ws connect')
  websocket.onopen = function() {
    console.log('ws open')
    heartCheck.reset().start();
  };
  websocket.onerror = function() {
    reconnect(url);
  };
  websocket.onclose = function(e) {
    heartCheck.reset()
    console.log('ws closed: ' + e.code + ' ' + e.reason + ' ' + e.wasClean);
  };
  websocket.onmessage = function(event) {
    lockReconnect = true;
    //event 为服务端传输的消息,在这里可以处理
    let data=event.data;//把获取到的消息处理成字典,方便后期使用
    PubSub.publish('message',data); //发布接收到的消息 'message' 为发布消息的名称,data 为发布的消息
  
  };
};
let reconnect = (url) => {
  if (lockReconnect) return;
  // 没连接上会一直重连,设置延迟避免请求过多
  setTimeout(function() {
    createWebSocket(url);
    lockReconnect = false;
  }, 4000);
};
let heartCheck = {
  timeout: 6000, // 6秒
  timeoutObj: null,
  reset: function() {
    clearInterval(this.timeoutObj);
    return this;
  },
  start: function() {
    this.timeoutObj = setInterval(function() {
      // 这里发送一个心跳,后端收到后,返回一个心跳消息,
      // onmessage拿到返回的心跳就说明连接正常
      websocket.send('HeartBeat');
    }, this.timeout);
  },
};
// 关闭连接
let closeWebSocket = () => {
  websocket && websocket.close();
};
export { websocket, createWebSocket, closeWebSocket };
相关文章
|
1月前
|
前端开发 JavaScript API
第八章 react组件实例中三大属性之ref
第八章 react组件实例中三大属性之ref
|
1月前
|
前端开发 数据库
第七章 react组件实例中三大属性之props
第七章 react组件实例中三大属性之props
|
1月前
|
存储 前端开发 API
第六章 react组件实例中三大属性之State
第六章 react组件实例中三大属性之State
|
1月前
|
XML 前端开发 JavaScript
【前端】深入了解React JSX语法及实例应用
【前端】深入了解React JSX语法及实例应用
29 0
|
10月前
|
前端开发 JavaScript Android开发
React Native 和 Flutter对比,包含代码实例
@[TOC](目录) React Native 和 Flutter 都是流行的跨平台移动应用开发框架。虽然它们在很多方面都有相似之处,但它们也有一些不同之处。在本文中,我们将详细比较这两个框架,讨论它们的优缺点、应用场景、性能以及包含的代码。 # 1. 框架概述 React Native 是由 Facebook 开发的一个开源框架,它允许开发者使用 JavaScript 和 React 来创建原生移动应用。React Native 可以用于开发 iOS、Android 和 Web 应用。它使用 JavaScript 的生态系统和工具,如 Babel、ESLint 和 React 工具链,使得开
111 0
|
10月前
|
前端开发 JavaScript Android开发
React Native详解和代码实例
@[TOC](目录) React Native 是一个用于构建原生移动应用程序的 JavaScript 框架。它使用 React 库,允许开发者使用 JavaScript 编写应用程序的 UI 和逻辑,并将其转换为本地平台(iOS 和 Android)上的原生视图。React Native 由 Facebook 开发,并于 2015 年发布。截至 2021 年,React Native 已经成为最受欢迎的跨平台移动应用程序开发框架之一。 在本详解中,我们将介绍 React Native 的主要特点、工作原理、优缺点以及代码示例。 # 一、React Native 的主要特点 1. 跨平台:Re
192 0
|
前端开发 JavaScript 算法
细读 React | 元素、组件、实例
细读 React | 元素、组件、实例
307 0
细读 React | 元素、组件、实例
|
前端开发
React 第一个实例
React 第一个实例
57 0
|
前端开发
React中的三大实例之ref的三种形式
React中的三大实例之ref的三种形式
91 0
|
JavaScript
js实现websocket实例
js实现websocket实例
216 0