react中封装websocket

2023-11-06

websocket.js中

//import e from “express”

//websocket的四个回调函数,onopen,onmessage,onerror,onclose

import { websocket } from "./Websocket"
import {message} from 'antd'
class createWebSocket {

constructor(url){

    this.connect(url)
    //console.log(url)
    this.myUrl = url
    //this.getMessage()
}

connect(url){//连接服务器
    this.ws = new WebSocket(url)
    this.ws.onopen = (e) =>{
        this.status = 'open'
        message.info('link succeed')
        console.log("connection to server is opened")
        //this.heartCheck.reset().start()
        this.ws.send('succeed')
        this.heartCheck()
    }
}
async getMessage (){//异步获取数据
    this.lockReconnect = true
    this.messageList = '';
    await new Promise((resolve) =>{
        this.ws.onmessage = (e) =>{
            //console.log(e.data)
            this.messageList = e.data
            //console.log(this.messageList)
            resolve()
        }
    })
    console.log(this.messageList)
    return this.messageList
}

heartCheck () {//心跳
    this.pingPong = 'ping'
    this.pingInterval = setInterval(() => {
        if(this.ws.readyState === 1){
            this.ws.send('ping')
        }
    }, 10000);
   this.pongInterval = setInterval(()=>{
       if(this.pingPong === 'ping'){
           this.closeHandle('pingPong没有改为pong')
       }
       console.log('return the pong')
   },20000) 
}
closeHandle(res){
    if(this.status !== 'close'){
        console.log('断开,重连websocket',res)
        if(this.pongInterval !== undefined && this.pingInterval !== undefined){
            clearInterval(this.pongInterval)
            clearInterval(this.pingInterval)
        }
        this.connect(this.myUrl)
    }else{
        console.log('websocket手动关闭了,或者正在连接')
    }
}

close(){//关闭连接
    clearInterval(this.pingInterval)
    clearInterval(this.pongInterval)
    this.ws.send('close')
    this.status = 'close'
    this.ws.onclose = e =>{
        console.log('close')
    }
}
}
export default createWebSocket

在组件中使用,利用服务器端传来的值修改组件中state的值

import createWebSocket from '../WebSocket'
ws = new createWebSocket('ws:...')
componentDidMount(){
    //this.test()
    //console.log('xxxx')
    this.ws.getMessage().then((res)=>{
        console.log(res)
        this.setState({data:res})
    })
}
componentWillUnmount(){
    this.ws.close()
}

利用node配一个本地服务器
server.js中
const WebSocket = require(‘ws’)
const express = require(‘express’)
const app = express()
app.listen(3003)

const wss = new WebSocket.Server({port:8989})
console.log(‘the connection is starting’)
wss.on(‘connection’,function(ws){
console.log(‘client connected’)
ws.on(‘message’,function(message){
console.log(‘received :’,message)
ws.send(‘hello world’)
})
})
控制台接收到客户端发来的请求
客户端打印出来服务端传来的信息

在控制台node server.js启动这个服务器

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react中封装websocket 的相关文章

  • Bootstrap 标签栏平滑移动导航按钮

    我有一个用于切换块的普通引导选项卡面板 在导航中切换块时 活动选项卡会突出显示 但现在 当我单击活动选项卡的背景时 它会立即发生变化 是否可以使切换选项卡时背景不会立即改变 而是根据需要哪个选项卡而平滑地左右移动 这可以用以下方法完成吗cs
  • HTML 和 标签有什么区别?

    HEAD 标签和 BODY 标签有什么区别 大多数 HTML 书籍仅 简短 提及 and 标签 但它们消失得很快 它们会影响浏览器呈现网页的方式吗 另外 它们会影响 javascript 的运行顺序吗 我的意思是 如果我里面有一个javas
  • 返回上一页

    我正在使用表格来 评价 页面 此表单将数据 发布 到其他地方的 php 脚本 我只是想在处理表单后显示一个链接 这将使用户返回到上一页 我可以在 php 脚本中使用 javascript 来执行此操作吗 GF 您可以使用链接来调用histo
  • 动态更改温斯顿的日志级别

    我尝试在运行时实现日志级别更改 我一直在关注https github com yannvr Winston dynamic loglevel blob master test https github com yannvr Winston
  • Chrome 开发工具命中代码但未命中断点

    我在 chrome 开发工具上启用了断点 并且在一行上有一个断点 我知道 chrome 正在运行 因为我将断点放在具有以下语句的行上 alert why is this not breaking 如果我在本地主机中找到该文件 则断点有效 断
  • 如何在 jQuery 中将标题转换为 URL slug?

    我正在 CodeIgniter 中开发一个应用程序 我试图在表单上创建一个字段来动态生成URL slug 我想做的是删除标点符号 将其转换为小写 然后用连字符替换空格 例如 Shane s Rib Shack 将变成 shanes rib
  • 仅在 Chrome 上我收到此错误:Uncaught TypeError: Illegal constructor [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 当我在 Chrome 上加载 jQuery 时 我会收到此错误 Uncaught TypeError Illegal constr
  • “require(...)”是常见的 JavaScript 模式还是库函数?

    我通常发现这是 node js 脚本 模块以及 phantomJS casperJS 等中的第一行 我很好奇 这是否是服务器端 javascript SSJS 的常见模式 类似于 include在 C C 中或import在 Java 中
  • Pjax动画

    我终于让 pjax 工作了 但我还有另一个问题 如何添加一些 jquery 动画 如淡出 幻灯片旧内容和淡入 幻灯片新内容 默认情况下 pjax 只是更改内容 没有任何好看的效果 任何帮助将非常感激 此致 基本上 你有一堆事件 https
  • 如何设置必须输入特定数字的字段?

    我想知道如何创建一个需要输入特定数字或文本的字段 例如 激活码 以及在输入的确认答案的情况下移动到 网页 并且在未确认的情况下移动到 另一页面 的按钮 使用必需的属性
  • 修改 Twitter 帖子上可编辑 Div 的内容

    我正在编写一个 chrome 扩展 它可以帮助用户在 Twitter 上输入内容 当在 twitter 上写推文时 twitter 会打开一个可编辑的 div 容器 当用户输入内容时 twitter 大概正在使用某些网络框架 会生成子 di
  • Socket IO 服务器到服务器

    服务器是否可以使用 Socket IO 连接到另一个服务器并被视为客户端 并让它加入房间 接收 io sockets in lobby emit 和更多 第一个服务器也在监听连接 消息 嘿 Brad 下面是我的完整 js 应用程序 供参考
  • Angularjs : $locationProvider.hashPrefix("!") ;

    我想将网址显示为 www test com 因为我正在使用 locationProvider hashPrefix 但它显示网址为 www test com 我想 哈希之前而不是哈希之后 Thanks var app angular mod
  • 在javascript中创建图像的缩略图方块(不丢失纵横比)

    我正在制作一个客户端拖放文件上传脚本作为书签 在上传之前 我使用 File API 将图像读取为 base64 格式并将其显示为缩略图 This is how my thumbnails look like I want them to l
  • 标记(Markdown)+ Mermaid(流程图和图表)

    努力去争取 美人鱼 https github com knsv mermaid https github com knsv mermaid跟 共事 标记 https github com chjj marked https github c
  • Vue-Router 抽象父路由

    我正在尝试将当前网站迁移到 vuejs 站点地图必须是 login signup password reset browse search dozens of other routes 由于其中一些路线共享大量 fx 因此我将它们设为父路线
  • 如何使用 AMQP 以“PeekLock”模式从 Azure 服务总线队列获取消息?

    我们正在尝试在 Node 应用程序中使用 Azure 服务总线 我们的要求是从队列中获取多条消息 由于Azure SDK for Node不支持批量检索 我们决定使用AMQP 虽然我们能够使用 Peek Messages 获取消息 如此处所
  • 使圆圈与 d3.js 上的多线匹配相同的颜色过滤?

    我有一个多线图 当按每种水果过滤时会更新 每条线条颜色对应不同的销售年份 在 的帮助下Shashank https stackoverflow com users 5569282 shashank 每个数据点线上的圆圈已添加到组中 而不是直
  • Keycloak-js updateToken(minValidity) 需要澄清

    我在Keycloak js中阅读了很多该方法的示例 但没有对以下方法进行明确的解释 updateToken minValidity number KeycloakPromise
  • $ 在 JQuery 中意味着什么

    在下面的 var obj one 1 two 2 three 3 four 4 five 5 each obj function i val console log val 这里是什么意思 是对象吗 是一个别名jQuery对象 函数 它充当

随机推荐

  • Java多线程实现抢票

    1 1抢票系统 多人抢票 package Demo8 多个线程同时操作一个对象 买车票例子 public class TestThread4 implements Runnable private int ticket nums 10 Ov
  • Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before

    在做项目时碰到一个问题 就是一直报 java lang IllegalStateException Couldn t read row 0 col 1 from CursorWindow Make sure the Cursor is in
  • QML设计登陆界面

    QML设计登陆界面 本文博客链接 http blog csdn net jdh99 作者 jdh 转载请注明 环境 主机 WIN7 开发环境 Qt5 2 说明 用QML设计一个应用的登陆界面 效果图 源代码 main qml javascr
  • python数据处理中的日期转换处理中的to_datetime()函数(一)

    python使用的是 jupyter notebook 话不多说 直接说说主要内容吧 一 函数简介 我们可以通过输入 import pandas as pd help pd to datetime 可以得到to datetime函数的相关作
  • 第三方登录之微信扫码登录

    文章目录 1 申请微信接入 2 项目环境搭建 3 后端Controller接口 4 HTML页面代码 5 测试结果 6 补充说明 小伙伴们有各种疑问可以去参考官方文档进行详细的学习下 微信开发文档 此次介绍的将是前后端不分离的微信扫码登录
  • 2022微信小程序填充昵称头像 open-type=“chooseAvatar“

    2021年7月份之后 微信开始加强对微信用户个人信息的安全防控 收回了相关服务端接口 微信后面也推出了前端填写昵称头像的方法 官方代码如下
  • gcc 与 g++ 的区别

    gcc 和 g GCC GNU Compiler Collection GUN 编译器集合 g 是 GCC 中的 GUN C Compiler C 编译器 在已编译好的 C 或者 C 代码的前提下 GCC 编译器已提供了调用接口 可以通过执
  • matlab循环每次循环都把结果输出来,怎么把循环的每一步结果都保存下来啊

    本帖最后由 芒点DK 于 2016 12 9 11 04 编辑 各位前辈请看我的代码 clear workspaces clear clc define variables rmin 0 rmax 8 N 9 dt 1 t 0 tmax 1
  • Flutter: 为字体增加渐变色描边

    文章目录 写在前面 内容 实现描边 实现渐变 一些调整 参考 写在前面 实现如下图的效果 这个数字的内部和外部都有渐变色 内容 实现描边 在网上搜索一轮 可以看到通过用 Stack 来让两个 Text叠加 并对上一个 Text设置外部描边
  • Java接口和多态

    Java接口 Java中的接口是一种定义了一组方法签名的抽象类型 它提供了一种方式来定义类之间的协议 即类应该实现哪些方法 在本教程中 我们将探讨Java中接口的使用和实现 步骤1 定义接口 我们首先需要定义一个接口 接口使用interfa
  • 27 KVM管理系统资源-管理虚拟CPU份额

    文章目录 27 KVM管理系统资源 管理虚拟CPU份额 27 1 概述 27 2 操作步骤 27 KVM管理系统资源 管理虚拟CPU份额 27 1 概述 虚拟化环境下 同一主机上的多个虚拟机竞争使用物理CPU 为了防止某些虚拟机占用过多的物
  • 什么是ARM TCM内存

    什么是ARM处理器上的TCM内存 它是一个驻留在处理器旁边的专用内存 还是一个配置为TCM 的RAM区域 如果它是专用内存 为什么我们可以配置它的位置和大小 TCM Tightly Coupled Memory是一个 或多个 小的专用内存区
  • iOS视频列表开发总结

    最近开发了一个较大的需求 即视频列表 特点是每个视频卡片高度不一致 包含不同的元素 若卡片长度超过一屏 还需要将底部的操作栏悬浮 可以上滑下滑自动切换到下一个播放 整体实现 UITableView作为容器 每一个Item都是一个视频 卡片高
  • webpack打包微信小程序

    webpack打包微信小程序目的 编写小程序代码时也可以引入 npm 上的插件 通过 webpack 打包后可以大大减小小程序代码的体积 项目目录 项目目录 plugin loadpath js src 把小程序的代码放到 src 文件夹内
  • 华为交换机常用的查询命令(自己学习时统计的)

    display 简写dis dis logbuffer 查询交换机日志 dis arp include 10 0 0 1 查询该网段已使用的ip dis arp include 0 0 1 查询该端口下的ip dis clock 查询时间
  • 【Spring】Spring 报错 AbstractMethodError hikari MicrometerMetricsTrackerFactory create

    1 概述 windows下运行一个Spring boot程序报错 如下 org springframework beans factory BeanCreationException Error creating bean with nam
  • vue从node服务器获取文件,用vue上传文件并接收它nodejs

    我想用vuejs上传一个文件到服务器 实际上我不想用表单来处理文件并上传它 我阻止自己提交和处理一些逻辑 所以在开始我想要做一些简单的只是检查它是否是一个PDF格式 如果一切正常 应该指向我的服务器端进行的NodeJS服务器用vue上传文件
  • 熟悉html css,编写HTML和CSS的前端开发中不一定熟悉JavaScript

    原标题 编写HTML和CSS的前端开发中不一定熟悉JavaScript 作为前端开发人员 HTML css Java是必备的知识技能 但是现实工作工作中并非所有的前端都知道Java 根据外国一个网站的匿名调查发现 有17 的开发人员不知道J
  • 2022年中国研究生数学建模竞赛E题-草原放牧策略研究

    一 背景介绍 草原作为世界上分布最广的重要的陆地植被类型之一 分布面积广泛 中国的草原面积为3 55亿公顷 是世界草原总面积的6 8 居世界第二 此外 草原在维护生物多样性 涵养水土 净化空气 固碳 调节水土流失和沙尘暴等方面具有重要的生态
  • react中封装websocket

    websocket js中 import e from express websocket的四个回调函数 onopen onmessage onerror onclose import websocket from Websocket im