WebSocket 的介绍及基本使用

news2024/12/27 13:10:29

websocket

什么是 websocket ? https://websocket.org/

  • 是一种网络通信协议,和 HTTP 协议 一样。

为什么需要websocket ?

  • 因为 HTTP 协议有一个缺陷:通信只能由客户端发起。

了解 websocket api含义

基于原生的 websocket 完成服务端和客户端的通讯

//  new WebSocket是一个内置的js对象,服务端的通讯地址放在WebSocket构造函数里
// wss是加密的WebSocket协议,类似https
// 建立连接
var ws = new WebSocket("wss://javascript.info/article/websocket/demo/hello");

// 监听连接成功
ws.onopen = function(evt) { 
  console.log("连接成功 ...");
  // 向服务端发消息
  ws.send("Hello WebSockets!");
};

// 接收服务端回的消息
ws.onmessage = function(evt) {
  console.log( "Received Message: " + evt.data);
  // 客户端主动关闭通讯
  ws.close();
};

// 服务端主动关闭通讯
ws.onclose = function(evt) {
  console.log("连接关闭");
};      

 socket.io

在做客户端和服务端 通讯业务时,可以采用使用一种前后端即时通讯解决方案 socket.io

socket.io 是什么?

  • socket.io 是一个基于 WebSocket 的 CS(客户端-服务端)的实时通信库
  • 使用它可以在后端提供一个即时通讯服务
  • 它也提供一个 js 库,在前端可以去链接后端的 socket.io 创建的服务
  • 总结:它是一套基于 websocket 前后端即时通讯解决方案

socket.io 如何使用? 

可以体验下这个 官方Demo(体验官方demo 建立连接时会产生cors跨域问题,需要在服务端的demo代码中开启cors,在index.js文件中加上cors:true)

const io = require('socket.io')(http,{cors:true})

socket.io-client 

 如何使用客户端js库?

 下载 socket.io-client

pnpm add socket.io-client

 如何建立连接?通过io函数传入服务器的地址

import io from 'socket.io-client'
// 参数1:不传默认是当前服务域名,开发中传入服务器地址
// 参数2:配置参数,根据需要再来介绍
const socket = io('http://localhost:3000')

如何确定连接成功?

socket.on('connect', () => {
  // 建立连接成功
  console.log('连接成功)
  // 发送消息
  socket.emit('chat message', '消息内容')
})

如何发送消息?

// chat message 发送消息事件,由后台约定,可变
socket.emit('chat message', '消息内容')

如何接收消息?

// chat message 接收消息事件,由后台约定,可变
socket.on('chat message', (msg) => {
  // msg 是服务器发送的消息,服务器会把你发的消息返回给你
  console.log(msg)
  // 关闭连接
  socket.close()
})

如何关闭连接?

// 离开组件需要使用
socket.close()

关闭连接后会触发一个事件 disconnect

// 连接关闭后触发
socket.on('disconnect', (msg) => {
  console.log('连接关闭')
})

 连接失败后会触发error事件

  socket.on('error', () => {
    console.log('连接失败')
  })

 在前端项目中实现使用 socket.io-client 实现即时通讯 贴代码

下载 引入

// 导入socket 类型
import io, { Socket } from 'socket.io-client'
// 声明一个全局变量socket 方便多处引用
let socket: Socket

onMounted(() => {
// 初始化io时传入authToken做身份认证---没有登录不能聊天,
// 传入当前问诊的订单id---才能把用户和用户的医生放在同一个房间里
  socket = io(baseURL, {
    auth: {
      token: `Bearer ${store.user?.token}`
    },
    query: {
      id: store.user?.id
    }
  }

  socket.on('connect', () => {
    console.log('连接成功')
  })

  socket.on('disconnect', () => {
    console.log('连接关闭')
  })

  socket.on('error', () => {
    console.log('连接失败')
  })
})

// 组件销毁时断开连接
onUnmounted(() => {
  socket.close()
})

 在这里,接收消息获取聊天的一些事件 也就是通讯规则,通讯规则需要参考约定的接口规则

chatMsgList 接收聊天记录

sendChatMsg 发送消息

receiveChatMsg 接收消息

updateMsgStatus 消息已读

getChatMsgList 获取聊天记录

statusChange 接收订单状态改变

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/686234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用指针突破类的private限制

使用指针突破类的private限制 继承的内存模型使用指针再子类中访问父类的私有变量 继承的内存模型 创建派生类对象时只会申请一次内存,派生类对象包含了基类对象的内存空间,this指针相同的。创建派生类对象时,先初始化基类对象,再…

Oracle数据库安全评估工具(DBSAT)

目录: 工具概述:先决条件:一、支持的操作系统及DB版本:1.支持的操作系统2.支持的数据库版本 二、评估工具的前提条件:1.所需安装包及工具2.Collector的先决条件3.Reporter的先决条件4.Discoverer的先决条件 工具下载&a…

23vue3铺垫知识——ES6模块化与异步编程高级用法

文章目录 一、ES6模块化1、回顾:nodejs中如何实现模块化2、前端模块化规范的分类3、什么是ES6模块化规范4、在nodeis中体验ES6模块化5、ES6模块化的基本语法5.1 默认导出与默认导入5.2 按需导出与按需导入5.3直接导入并执行模块中的代码 二、Promise1、回调地狱1.1 如何解决回调…

iptables 限制转发

概述 可以通过设置内核参数来启动或停止内核的转发 sysctl -w net.ipv4.ip_forward1当开启了Linux内核转发 cat /proc/sys/net/ipv4/ip_forward开启内核转发后,当Linux主机收到不属于自己IP的数据包时,将会根据主机上配置的路由表进行转发&#xff0c…

kubernetes的二进制安装

二进制搭建 Kubernetes v1.20 k8s集群master01:192.168.232.37 kube-apiserver kube-controller-manager kube-scheduler etcd k8s集群master02:192.168.232.7 k8s集群node01:192.168.232.47 kubelet kube-proxy docker k8s集群node…

Android jar包的生成与使用

前言 Android中常见的第三方库有: *.so,*.jar,*.aar,今天给大家分享一下jar文件,在Android应用程序开发中,我们需要使用一些Java库,可能这个库是自己封装好的或者第三方的库,我们每…

收入指引令人失望,股票回购不积极,满帮(YMM)面临监管风险

来源:猛兽财经 作者:猛兽财经 收入指引令人失望 上个月末,满帮(YMM)公布了2023年第一季度的财务业绩,同时还公布了2023年第二季度的管理指引。 满帮预计其2023年第二季度的收入将在19.10亿元至20.10亿元之…

【SwinFusion:通用网络框架 :Swin Transformer】

SwinFusion: Cross-domain Long-range Learning for General Image Fusion via Swin Transformer (SwinFusion:基于Swin Transformer的跨域远程学习通用图像融合) 提出了一种基于跨域远程学习和Swin Transformer的通用图像融合框架SwinFusi…

粮油质量追溯系统源码,MES生产加工管理系统

粮油生产质量追溯系统,实现一物一码,全程追溯,正向追踪,逆向溯源。 技术架构:spring bootmybatiseasyuimysql 。 粮油生产质量追溯系统实现种植主体、种植基地、生产计划、压榨、精炼、包装、销售、物料管理、检验检测…

AI绘画:Roop插件的使用详解!

roop插件有哪些特性,如果安装,已经在上一篇讲的非常详细了。不知道你们装得怎么样了? 今天,来详细的说一说roop插件的使用。 首先呢启动我们的Stable-Diffusion-WebUI,然后确保插件已经启用! 选择好模型&a…

【Spring Boot 初识丨七 丨外部化配置(一)】属性详解

上一篇讲了 Spring Boot 的依赖注入 本篇来讲一讲Spring Boot 外部化配置 Spring Boot 初识: 【Spring Boot 初识丨一】入门实战 【Spring Boot 初识丨二】maven 【Spring Boot 初识丨三】starter 【Spring Boot 初识丨四】主应用类 【Spring Boot 初识丨五】beans …

35岁的社区网格长李宝东,半个月搭建出一套网格化安全管理系统

2020年以来,网格化治理在陕西省榆林市榆阳区驼峰路街道的各个社区广泛应用。为了给社区群众提供高效、快捷的服务,驼峰路街道按照“11N”模式给社区配备服务人员。 网格员们穿梭于各个社区中,或是对平房、小区及商户进行常规巡查&#xff0c…

如何在 Spring Boot 中使用 OAuth2

在 Spring Boot 中使用 OAuth2 OAuth2 是一种授权协议,用于授权第三方应用程序访问受保护的资源。Spring Security 是一个强大的安全框架,支持 OAuth2 协议。在本文中,我们将介绍如何在 Spring Boot 中使用 Spring Security 实现 OAuth2 认证…

数据库性能优化必读,AntDB-M数据库的哈希索引设计

数据库加快访问速度的关键技术之一就是索引,索引的设计及使用方式极大程度上影响了数据库的性能。AntDB-M支持Hash、BTree两种索引类型。本文主要讲解Hash索引的相关设计,并给出一些使用建议。 1. 相关概念 桶 用于定位索引记录的容器,容器中…

python学习——列表

一、列表介绍 可以将列表视作一个容器,里面可以存储多个元素。这些元素可以是不同的数据类型。 二、列表的操作 2.1.列表的创建 方式一:使用中括号[]进行列表的创建,元素之间使用英文的逗号隔开。例如 在上图中,lst1是列表对象名…

Ant Design Vue - table实现跨页选择

实现下图跨页选择效果 :rowSelection"{ onSelect: onSelect, onSelectAll: onSelectAll, selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"onSelectChange(selectedRowKeys, selectionRows) {console.log(select, this.selectedRowKeys, this.selecte…

ActiveMQ消息队列主从集群

文章目录 1.ActiveMQ消息队列主从集群模式1.1.主从集群架构1.2.环境规划 2.部署ActiveMQ主从高可用集群2.1.部署Zookeeper集群2.1.1.搭建Zookeeper三节点2.1.2.配置Zookeeper三节点2.1.3.配置Zookeeper各个节点的myid2.1.4.启动Zookeeper集群 2.2.部署ActiveMQ主从集群2.2.1.部…

解决90%面试问题!GitHub顶级“Java面试手册“了解下八股文天花板

前言 身为java开发工程师的你找到自己满意的工作了吗?又或者还在面试的路上经历一次又一次的失败。迟迟找不到正确的开门砖,也许你的技术能力可能并不差但就是在面试上得不到充分的证明。 而那些成功拿下自己满意的开发工作的人又是怎样做到的呢?我这一路走来也有…

2023下半年杭州/广州/深圳软考(中/高级)认证,进入备考

软考是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资格考试。 系统集成…

Svg基本使用

1.说明 双闭合标签&#xff0c;默认宽度和高度300*150 svg绘制图形务必在svg标签内使用 ,可以通过样式设置宽高 svg与canvas区别就是它并不是图片 2.绘制直线 2.1代码展示 <linex1"100"y1"100"x2"500"y2"100"stroke"pink…