首页 > 其他分享 >Socket.io入门

Socket.io入门

时间:2023-09-04 20:11:33浏览次数:24  
标签:const socket express 入门 roomName io Socket

Socket.io入门

根据官方文档socket.io使用必须客户端根服务端一致,socket.io不兼容webSocket或者其他模块,因为socket.io在连接时做了自定义处理,
所以不同的长连接npm模块并不互通

首先安装npm包:

客户端(vue):

npm i [email protected]

服务端(express):

npm i [email protected]

因为socket.io不同版本之间使用方法有差异,本文写作时采用的是4.7.2版本

简单使用express.js+socket.io搭建一个服务器用来测试:

/**
 * @file server.js
 * */

import express from "express";
import { createServer } from "http";
import { Server } from "socket.io";
const app = express();
const httpServer = createServer(app);
const io = new Server(httpServer, { 
  cors: {
    /* 需要指定,要不然本地调试过程中会产生跨域*/
    origin: "*",
  }
});

/* 这里就是当客户端socket连接到服务端socket的生命周期 */
io.on('connection',function(socket) {
  /* io.emit(事件名,参数) */
  io.emit('message','恭喜连接成功');
})
httpServer.listen(3000, () => console.log("run"));
/**
 * @file client.js
 * */
import {io} from 'socket.io-client'
/* 指定连接的地址 */
const socket = io('ws://localhost:3000');
socket.connect();
socket.on('message',message=>{
  console.log('我是客户端,接收到了数据',message);
})

以上就是一个简单的socket.io通信的例子,下面记录一些常用用法,首先要了解socket.io基本概念

Socket.IO 中的每一个socket都由一个随机的、不可猜测的、唯一的标识符Socket#id。为了您的方便,每个socket都会自动加入一个由其自己的 id 标识的房间

房间是一个虚拟的仅存在于服务端的虚拟的概念,类似于分组的意思。

  • 加入房间 socket.join(roomName);
  • 离开房间 socket.leave(roomName);
  • 查询当前连接是否已加入该房间
const room = io.sockets.adapter.rooms.get(roomName);
if (room && room.has(socket.id)) {
  /* 已加入 */
}
  • 发送消息给单个连接的客户端 io.in(socket.id).emit(事件名,参数)
  • 在房间内发送广播 io.in(roomName).emit(事件名,参数)
  • 获取房间内的连接数(promise) await (io.in(roomName).fetchSockets()).length

写于2023年09月04日

标签:const,socket,express,入门,roomName,io,Socket
From: https://www.cnblogs.com/alone4436/p/17677969.html

相关文章

  • Zookeeper入门
    简介ZooKeeper是Apache软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。可以理解为zookeeper是文件系统+监听通知机制。ZooKeeper的架构通过冗余服务实现高可用性。Zookeeper的设计目标是将那些复杂且容易出错的分布式一致性服......
  • 快速入门
    快速入门NW.js基于Chromium 和 Node.js.NW.js利用Web技术结合Node.js及其模块进行桌面应用开发.获取NW.js您可以从官网获取最新版本的文件,或通过源代码构建.【注意】 :推荐选择SDK构建方式开发应用,这样就可以使用开发工具进行调试,参考[构建方式](Advanced/Buil......
  • ChatGLM2 源码解析:`ChatGLMForConditionalGeneration.forward`
    classChatGLMForConditionalGeneration(ChatGLMPreTrainedModel):def__init__(self,config:ChatGLMConfig,empty_init=True,device=None):super().__init__(config)self.max_sequence_length=config.max_lengthself.transformer=C......
  • 【ROS2机器人入门到实战】学会使用按键-GPIO输入
    3.学会使用按键-GPIO输入写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn你好,我是爱吃鱼香ROS的小鱼。上一节完成了LED灯的......
  • 【ROS2机器人入门到实战】嵌入式开发之从点灯开始
    第十三章嵌入式开发之从点灯开始写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn你好,我是小鱼。本章开始我们将一起走进机......
  • 【ROS2机器人入门到实战】使用开源库驱动IMU
    2.使用开源库驱动IMU写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn你好,我是爱吃鱼香ROS的小鱼。上一节我们安装好了MPU605......
  • 1141 PAT Ranking of Institutions(附测试点5分析)
    题目:AftereachPAT,thePATCenterwillannouncetherankingofinstitutionsbasedontheirstudents'performances.Nowyouareaskedtogeneratetheranklist.InputSpecification:Eachinputfilecontainsonetestcase.Foreachcase,thefirstline......
  • k8s之Taint 与 Toleration (污点与容忍)
    背景介绍:在生产k8s集群环境中,业务的pod数量很多,首先要满足的就是所有pod能够负载均衡的分配到集群中的各个节点,其次就是每台服务器的硬件配置可能不同,特定的业务服务需要运行到特定的node上(比如依赖GPU,业务服务所依赖的高/低硬件配置)而为了达到用户所期望的服务调度,我们可以用到污......
  • Caused by: java.sql.SQLSyntaxErrorException: ORA-00923: 未找到要求的 FROM 关键字
    最终是,查询条件,入参为null,所导致。JDBCgetParameterTypecallfailed-usingfallbackmethodinsteadRA-00923:FROMkeywordnotfoundwhereexpected 进一步,这个错误,在job执行的时候,会导致,oracle游标不够ORA-01000maximumopencursorsexceeded   参考: ......
  • 你折腾一天都装不上的插件,函数计算部署 Stable Diffusion 都内置了
    在进行函数计算StableDiffusion答疑的过程中,遇到很多同学在装一些插件的过程中遇到了难题,有一些需要安装一些依赖,有一些需要写一些代码,很多时候安装一个插件就能折腾几天,我们收集了很多同学需要的插件,这一次把比较难装的StableDiffusion插件都装好了。可以根据自己的需要自......