首页 > 其他分享 >Socket.IO 的使用

Socket.IO 的使用

时间:2023-06-03 18:57:01浏览次数:33  
标签:socket IO io 使用 emit Socket 客户端

概述

Socket.IO 是一个用于实时双向通信的 JavaScript 库。它允许在客户端和服务器之间建立实时的、基于事件的通信通道。

Socket.IO 提供了一个简单且灵活的 API,可用于在浏览器和服务器之间传输实时数据。它解决了传统的基于 HTTP 请求-响应模型的限制,允许服务器主动向客户端发送消息,而不需要客户端先发出请求。这使得 Socket.IO 成为构建实时应用程序、聊天应用、多人游戏、实时分析和协作工具等的理想选择。

官方网站 Github

特性

  1. 实时性:通过建立持久连接,实现实时的双向通信,服务器和客户端可以随时发送消息和事件。

  2. 跨平台:Socket.IO 可以在各种平台上使用,包括浏览器、移动设备和服务器。

  3. 自动回退:如果浏览器或网络环境不支持 WebSocket,Socket.IO 会自动降级为其他传输机制,以保证在各种环境下的兼容性。

  4. 事件驱动:Socket.IO 使用基于事件的编程模型,通过触发和监听事件来实现双向通信。

  5. 客户端库支持:Socket.IO 提供了用于浏览器和移动设备的客户端库,使得在客户端使用 Socket.IO 变得简单和便捷。

  6. 可靠性:Socket.IO 具有自动重连和消息队列等机制,以确保可靠的消息传递和连接恢复。

开始

服务端

简单示例

import { createServer } from "http";
import { Server } from "socket.io";

const httpServer = createServer();
const io = new Server(httpServer);

io.on("connection", (socket) => {
    console.log('一名用户已连接');

    socket.on("hello", function (data) {
        socket.emit("hello", {
            ID: socket.id
        });
    })

    socket.on('ping', (timestamp) => {
        socket.emit('pong', timestamp);
    });

    socket.on('disconnect', function () {
        console.log("一名用户已离开");
        console.log(io.engine.clientsCount);
    })
});

httpServer.listen(3000, () => {
    console.log("socket.io server started at port 3000");
});

用法

io.on("connection", (socket) => {
  socket.emit("request" /* … */); // 向客户端发送消息
  io.emit("broadcast" /* … */); // 向所有客户端发送消息
  socket.on("reply", () => {/* … */}); // 监听客户端消息
  io.sockets.to("/* roomid */").emit("update" /* … */); // 向指定房间发送消息
  socket.join("/* roomid */"); // 加入房间
  socket.leave("/* roomid */"); // 离开房间
  io.of("/").adapter.rooms["/* roomid */"]; // 获取房间信息
});

客户端

import { io } from "./js/socket.io.esm.min.js";

export const socket = io("ws://localhost:3000");
//export const socket = io("ws://example.com"); 

export function getPing(): void {
  socket.emit("ping", Date.now());
  socket.on("pong", (timestamp) => {
    const latency = Date.now() - timestamp;
    console.log(`Latency: ${latency}ms`);
  });
}

标签:socket,IO,io,使用,emit,Socket,客户端
From: https://www.cnblogs.com/mydyxy/p/17454385.html

相关文章

  • webGPU orillusion(一)
    关于架构的理解与认识 Orillusion 核心借鉴了 ECS 结构,遵循 组合优于继承 的开发设计原则,实现了自己的组件系统。我们将传统复杂的逻辑划分为独立的、可重复利用的部分,每个部分可以单独封装运行逻辑。然后通过灵活组合的形式,将多个简单组件合并在一起运行从而表现复杂的功......
  • 使用 Node.js 连接 MySQL
    概述当使用Node.js开发Web应用程序时,经常需要与数据库进行交互来存储和检索数据。MySQL是一个流行的关系型数据库管理系统,它提供了强大的功能和性能。本文将介绍如何使用Node.js连接MySQL数据库,并展示一些常见的操作示例。开始在这里我们将使用Node.js的mysql2库来连......
  • File、IO流概述
        ......
  • 使用Django创建一个项目
    ......
  • (五)Spring源码解析:ApplicationContext源码解析
    一、概述1.1>整体概览在前面的内容中,我们针对BeanFactory进行了深度的分析。那么,下面我们将针对BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与BeanFactory的功能相似,都是用于向IOC中加载Bean的。由于ApplicationConext的功能是大于BeanFactory的......
  • 基于深度学习的图像分类:使用卷积神经网络实现猫狗分类器
    摘要:深度学习在计算机视觉领域中具有广泛的应用。本文将介绍如何使用卷积神经网络(CNN)实现一个猫狗分类器。我们将使用Python和TensorFlow框架搭建一个简单的卷积神经网络模型,并利用猫狗图像数据集进行训练和测试。通过本文,读者将了解到深度学习在图像分类任务中的基本原理和实践应......
  • 直线模组中使用滚珠丝杆与普通丝杆的区别
    滚珠丝杆模组是直线模组中的其中一种,滚珠丝杆模组能成为工业设备产业界使用最广的自动化产品之一,很大程度上在于滚珠丝杆与其他配件相互协调相互作用,并且滚珠丝杆在其中承担着重要的角色。市场上,丝杆的种类有很多,那为什么选用滚珠丝杆,而不选用普通丝杆呢?这两者之间又具有哪些区别?1......
  • 使用Scanner 的一些细节
    使用Scanner的一些细节String转换成 Int intvalue-interger.parseInt();int转换成StringSystem.out.println(数字+“字符”);  ......
  • 关于SQLAlchemy中update的使用参数synchronize_session
    update语句带上synchronize_session="fetch"或者带上synchronize_session=False是啥区别在SQLAlchemy中,当您使用update语句更新数据库中的记录时,可以使用`synchronize_session`参数来指定要同步的会话对象。-当`synchronize_session`设置为`False`时,会话对象不会自动同步,这意......
  • 十四、使用Sentinal进行限流熔断
    内容sentinal限流降级:限流是接口流量太大要进行限制,限制后的流量进行降级。sentinal熔断降级:熔断是A调用B,而B不靠谱,就熔断不调用,并降级。sentinal+nacos组合。常见的限流算法静态窗口限流动态窗口限流例如:当前是第2.5秒静态:统计第2秒到现在的请求数......