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

websocket操作入门

基本介绍:WebSocket 是一种在单个 TCP 连接上进行全双工通信的网络协议,实现了浏览器与服务器之间的持久性实时通信。(我认为来看这篇文章的读者,应该是有基本了解的,所以这些概念就简略说一下)

我的代码在文章最后

一、导入

1.1 客户端引入

默认情况下,Socket.IO 服务器在 处公开一个客户端包

<script src="/socket.io/socket.io.js"></script>
<script>const socket = io();
</script>

如果不是的话:

npm install socket.io-client    //根据你的包来选择
yarn add socket.io-client

1.2 服务端导入

npm install socket.io    //根据你的包来选择
yarn add socket.io

二、初始化

2.1客户端

2.1.1同一域

const socket = io();

2.1.2不同域

const socket = io("https://server-domain.com");

2.2服务端

2.2.1 独立服务器

这种方式下,Socket.IO 会自己创建并管理一个 HTTP 服务器,并将其升级为 WebSocket 服务。它不依赖于任何现有的 HTTP 服务器。

const { Server } = require("socket.io");const io = new Server(3000, { /* options */ });    // Socket.IO 自己创建并监听 3000 端口io.on("connection", (socket) => {// ...
});

2.2.2 依附于现有 HTTP 服务器

这种方式是将 Socket.IO 实例绑定到一个你已经创建好的 HTTP 服务器上。这个 HTTP 服务器可能是由 Express.js、Koa、Next.js 或是原生 Node.js http.createServer 创建的。

const { createServer } = require("http");
const { Server } = require("socket.io");const httpServer = createServer();
const io = new Server(httpServer, { /* options */ });io.on("connection", (socket) => {// ...
});httpServer.listen(3000);

例子:

//导入http模块,用于创建http服务器
const http=require('http') //从 socket.io 库中解构出 Server 类
const {Server}=require('socket.io')//导入 Express 框架,用于创建 Web 应用和路由
const express=require('express')//// 创建 Express 应用实例,用于定义路由、中间件等
const app=express()// 使用 http.createServer() 方法创建一个 HTTP 服务器
// 并将 Express 应用作为请求处理器传入
// 这样 HTTP 服务器就能处理 Express 定义的所有路由和中间件
const server=http.createServer(app)// 初始化socket.io服务器,允许跨域
const io = new Server(server, {cors: {   origin: "http://localhost:5173", // Vue开发服务器端口(前端地址)methods: ['GET', 'POST']}}
);server.listen(3000)    //服务端

三、具体介绍

3.1客户端

3.1.1发送

// 发送简单消息
socket.emit('chat message', '你好服务器');// 发送对象消息
socket.emit('user message', {text: 'Hello',userId: '123',timestamp: new Date()
});

3.1.2接收

// 接收服务端消息
socket.on('server message', (data) => {console.log('收到服务端消息:', data);
});// 接收广播消息
socket.on('broadcast', (data) => {console.log('收到广播:', data);
});

3.2服务器代码

3.1.1发送

// 发送给当前客户端
socket.emit('server message', '单独回复');// 广播给所有客户端
io.emit('broadcast', '全体消息');// 发送给除当前客户端外的所有人
socket.broadcast.emit('notification', '新用户加入');

3.1.2接收

io.on('connection', (socket) => {// 接收客户端消息socket.on('client message', (data) => {console.log('收到客户端消息:', data);});
});

其实这个挺好记的,一般.on就是监听(接收),而.emit就是发送

四、实例

事先说明:我是把服务器和客户端分开的,可以理解为分别独立创建两个文件夹
所以在服务器和客户端要分别安装socket.io。

4.1客户端

<template><input type="text" v-model="massage"><button @click="submitHandle">提交</button><br><ul ref="list"></ul></template><script>
import { io } from 'socket.io-client'
export default{data(){return{massage:'',socket:io('http://localhost:3000',{transports: ['websocket', 'polling'], // 明确指定传输方式timeout: 10000 // 设置超时时间})}},mounted(){// 连接到服务器
// const socket = io('http://localhost:3000',{
//   transports: ['websocket', 'polling'], // 明确指定传输方式
//    timeout: 10000 // 设置超时时间
// });// 监听连接事件
this.socket.on('connect', () => {console.log('连接成功,ID:', this.socket.id);});//监听断开连接事件
this.socket.on('disconnect', () => {console.log('连接断开');});//接收服务端的信息
this.socket.on('responed',(msg)=>{var list=this.$refs.list//创建一个标签,并设置一个内容var li=document.createElement('li')li.textContent=msglist.appendChild(li)})
},
methods:{submitHandle(){//向服务端发送消息this.socket.emit('chat',this.massage)}
}
}
</script>

4.2服务器

//导入http模块,用于创建http服务器
const http=require('http') //从 socket.io 库中解构出 Server 类
const {Server}=require('socket.io')//导入 Express 框架,用于创建 Web 应用和路由
const express=require('express')//// 创建 Express 应用实例,用于定义路由、中间件等
const app=express()// 使用 http.createServer() 方法创建一个 HTTP 服务器
// 并将 Express 应用作为请求处理器传入
// 这样 HTTP 服务器就能处理 Express 定义的所有路由和中间件
const server=http.createServer(app)// 初始化socket.io服务器,允许跨域
const io = new Server(server, {cors: {   origin: "http://localhost:5173", // Vue开发服务器端口(前端地址)methods: ['GET', 'POST']}}
);//当客户端成功连接到服务器时,触发 connection 事件
io.on('connection',(socket)=>{//向所有客户端发送消息//io.emit('hello','欢迎')//接收客户端发送的消息socket.on('chat',(data)=>{//将接收的消息,发送到除了当前客户端的其它客户socket.broadcast.emit('responed',data)})
})server.listen(3000)

效果:

http://www.dtcms.com/a/606414.html

相关文章:

  • Golang学习笔记:定时crontab
  • Go语言编译器源码分析
  • LeetCode hot100:021 合并两个有序链表:两种解法的深入剖析
  • 做二手车网站需要什么手续费wordpress 批量换
  • 【基于 Spring Cloud Alibaba 的微服务电商项目】完整实现思路
  • 2025中国密码学会年会“人才培养论坛”成功举办,产学共探密码人才培育新路径
  • 高质量网站外链建设大揭秘网址收录大全
  • 网站建设的数字化和互联网化建设局工作怎么样
  • resource 和 K8S 对接部分 apifox
  • C语言编译器下载地址 | 提供多种C语言编译工具下载链接与使用指南
  • 网站备案跟网安备案区别展厅设计制作
  • 公司建立网站流程图开原网站制作
  • Python工程师的职业发展路径:专家访谈
  • 研发管理知识库(8)Terraform 简介
  • 网站后台常用密码工业设计公司如何选择
  • 做民宿的网站有哪些抖音代运营大概多少钱一个月
  • C++模块化项目构建入门教
  • Ansible Playbook入门指南:核心语法与实战
  • 苏州高端网站建设设计公司哪家好wordpress 多个页面
  • 云手机是真实手机吗
  • 制作网站的详细步骤江阴便宜做网站
  • 建设局考试通知文件网站苏州工业园区有哪些企业
  • Git LFS
  • 负氧离子监测站:精准捕捉空气中的负氧离子浓度
  • GitLab下载安装
  • 建网站公司哪里好了解做房产广告的网站
  • 机器人运动控制全解析:从经典架构到AI智能体的进化之路
  • 北京三原色ps网站北京个人网站公司
  • 东莞网站建设求职简历类似淘宝网站模板
  • laravel插件---验证码插件