当前位置: 首页 > news >正文

WebSocket、socket.io-client

WebSocket

WebSocket 是一种网络通信协议,它提供了一个在单个长期持久的 TCP 连接上进行全双工(full-duplex)通信的通道。

WebSocket 允许客户端和服务器之间进行双向的数据交换,这意味着服务器可以主动向客户端推送数据,而不必等待客户端的请求。在 WebSocket 连接建立后,客户端和服务器都可以在任何时候发送数据,这大大提高了实时性和交互性。

socket.io-client

前端使用时可以直接通过new WebSocket来使用,但是使用原生的WebSocket提供的功能比较简单,需要自己处理一些问题。这是可以使用socket.io-client来进行操作

socket.io-client 与原生的 WebSocket API 相比,提供了更丰富的特性和更广泛的兼容性,这使得它在许多情况下成为更优的选择。以下是 socket.io-client 的一些主要优点:

  1. 兼容性:
    socket.io-client 在不支持 WebSocket 的浏览器中自动回退到其他传输方式,如长轮询(long-polling)、Flash Sockets 等,确保在几乎所有现代浏览器和一些旧版浏览器中都能工作。

  2. 自动重连:
    当网络连接中断或服务器重启时,socket.io-client 可以自动尝试重新连接,而原生 WebSocket 需要手动处理重连逻辑。

  3. 错误处理:
    socket.io-client 提供了更完善的错误处理机制,可以更好地报告和处理网络错误。

基本使用

socket.io-client 是一个用于在客户端(通常是浏览器或Node.js应用)上与 Socket.IO 服务器进行通信的库。它提供了一个强大的 API,能够处理实时双向通信,包括自动重连、心跳检测、错误处理等功能。

安装

首先,你需要安装 socket.io-client。在你的项目目录中运行以下命令:

npm install socket.io-client

引入模块

在你的 JavaScript 文件中,可以使用 ES6 模块导入方式引入 socket.io-client

import { io } from 'socket.io-client';

或者,如果你使用的是 CommonJS 模块,可以这样:

const io = require('socket.io-client');

创建 Socket 实例

创建一个 Socket 实例通常需要传入服务器的 URL。这可以是相对路径(对于同一域名),也可以是完整的 URL(对于跨域连接)。例如:

const socket = io('http://localhost:3000');
const socket = io('https://yourdomain.com');
const socket = io("wss://server-domain.com");

监听事件

一旦你创建了 Socket 实例,就可以监听各种事件,比如连接状态变化、接收消息等。

socket.on('connect', () => {console.log('Connected to server');
});socket.on('disconnect', (reason) => {console.log('Disconnected from server', reason);
});socket.on('message', (data) => {console.log('Received message from server', data);
});

发送数据

你可以使用 emit 方法向服务器发送事件和数据。

socket.emit('chat message', { message: 'Hello from the client!' });

断开连接

当不再需要连接时,可以显式地关闭 Socket 连接:

socket.disconnect();

完整示例

下面是一个完整的示例,展示如何在客户端使用 socket.io-client

import { io } from 'socket.io-client';// 创建 Socket 实例
const socket = io('http://localhost:3000');// 监听连接事件
socket.on('connect', () => {console.log('Connected to server');
});// 监听接收消息事件
socket.on('message', (data) => {console.log('Received message from server', data);
});// 发送消息到服务器
socket.emit('chat message', { message: 'Hello from the client!' });// 当组件销毁时,关闭 Socket 连接
// 如果你是在 Vue 或 React 的生命周期钩子中使用,确保在这里调用 disconnect
// 或者使用适当的事件来触发断开连接
// socket.disconnect();

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 前端JS特效第34波:jQuery支持拖拽图片上传的图片批量上传插件
  • 提高项目透明度:有效的跟踪软件
  • 笔记:使用Microsoft.EntityFrameworkCore.Proxies做数据库延迟加载
  • E12.【C语言】练习:求两个数的最大公约数
  • Java实现堆排序算法详解及优化
  • JavaWeb(三:JDBC 与 MVC)
  • iOS热门面试题(四)
  • ARM学习(29)NXP 双coreMCU IMX1160学习----NorFlash 启动引脚选择
  • gin源码分析
  • fortran简单排序算法,对一维、二维矩阵进行正序或倒序排序
  • 【深度学习】PyTorch深度学习笔记02-线性模型
  • 百度安全大模型智能体实践入选信通院“安全守卫者计划”优秀案例
  • 专业条码二维码扫描设备和手机二维码扫描软件的区别?
  • 【Java--数据结构】栈:不仅仅是数据存储,它是编程的艺术
  • Docker 容器出现 IP 冲突
  • Angular 响应式表单 基础例子
  • C++类中的特殊成员函数
  • ES6语法详解(一)
  • JavaScript创建对象的四种方式
  • MYSQL 的 IF 函数
  • mysql中InnoDB引擎中页的概念
  • python_bomb----数据类型总结
  • Python中eval与exec的使用及区别
  • swift基础之_对象 实例方法 对象方法。
  • TypeScript实现数据结构(一)栈,队列,链表
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • windows下如何用phpstorm同步测试服务器
  • 分布式熔断降级平台aegis
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 浅谈web中前端模板引擎的使用
  • 区块链技术特点之去中心化特性
  • 软件开发学习的5大技巧,你知道吗?
  • 为什么要用IPython/Jupyter?
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 用简单代码看卷积组块发展
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 通过调用文摘列表API获取文摘
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #Ubuntu(修改root信息)
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (1)SpringCloud 整合Python
  • (2)STL算法之元素计数
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (四)汇编语言——简单程序
  • (算法)N皇后问题
  • (一) 初入MySQL 【认识和部署】
  • (转)jQuery 基础
  • (转)关于如何学好游戏3D引擎编程的一些经验