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

websoket

WebSockets 是一种先进的技术。它可以在用户的浏览器和服务器之间打开交互式通信会话。你可以向服务器发送消息并接收事件驱动的响应,而无需通过轮询服务器的方式以获得响应,比较典型的应用场景就是即时通讯(聊天)系统。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>WebSocket 示例</title></head><body><script>// 实例化 socketconst ws = new WebSocket('wss://socketsbay.com/wss/v2/1/demo/')// 监听连接的建立ws.onopen = function (ev) {console.log('建立连接...')ws.send('Hello WebSockets!')}// 监听连接的断开ws.onclose = function (ev) {console.log('断开连接...')}// 监听 socket 服务器消息ws.onmessage = function (ev) {console.log('收到消息: ' + ev.data)}</script></body>
</html>

Socket.IO 是基于 WebSocket 进行的二次封装,封装了更多的业务层面的逻辑,如身份认证等、事件驱动等。

注:其实 Socket.IO 不仅仅是封装了 WebSocket,还有基于 Ajax 的长轮询机制,在不支持 WebSocket 的环境中会自动降级为基于 Ajax 的长轮询机制。

长轮询机制可以粗暴的理解为在一个定时器中不断的重复发 Ajax 请求,以实现与服务器实时通信的功能。

客户端代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>socket.io 示例</title>
</head><body><button id="myButton">点击</button><!-- <script src="node_modules/socket.io/client-dist/socket.io.js"></script> --><script src="https://cdn.socket.io/4.4.1/socket.io.min.js"></script><script>// 实例化const socket = io('http://localhost:3000', {transports: ['websocket'],})socket.on('connect', () => {console.log('建立连接...')})socket.on('disconnect', () => {console.log('断开连接...')})socket.on('sendToClient', (msg) => {console.log('收到来自服务器数据: ' + msg)})var myButton = document.getElementById('myButton');myButton.addEventListener('click', function () {socket.emit('sendToServer', '的花花世界是江苏省靖江市就是')});</script>
</body></html>

服务端代码

// server.js
import { createServer } from 'http'
import { Server } from 'socket.io'
import path from 'path'const server = createServer()
const io = new Server(server)// websocket
io.on('connection', (client) => {console.log('建立连接...')// 消息发送client.on('sendToServer', (msg) => {console.log('收到了客户端的数据: ' + msg)// 随机返回一条消息const messages = ['你好!', '我在写代码', '快下课了吧?']// 0 ~ 2 随机数据const index = Math.floor(Math.random() * 3)// 向客户端回复消息io.emit('sendToClient', messages[index])})// 断开连接client.on('disconnect', () => {console.log('断开连接...')})
})server.listen(3000, () => {console.log('server start')
})

相关文章:

  • CTR之行为序列建模用户兴趣:DIN
  • 用于将Grafana默认数据库sqlite3迁移到MySQL数据库
  • 如何用GPT进行成像光谱遥感数据处理?
  • HarmonyOS Stage模型 权限申请
  • 论文阅读:How Do Neural Networks See Depth in Single Images?
  • SQLite 的使用
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-19-处理鼠标拖拽-中篇
  • 一款跳转警告HTML单页模板源码
  • MySQL 窗口函数温故知新
  • firewall 常用命令
  • Python基于PyQt打包一个exe应用程序
  • 什么是Elasticsearch SQL
  • EXCEL 在列不同单元格之间插入N个空行
  • ChatGPT调教指南 | 咒语指南 | Prompts提示词教程(二)
  • 10 个 Linux 中超方便的 Bash 别名
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • DataBase in Android
  • golang中接口赋值与方法集
  • k8s如何管理Pod
  • ReactNativeweexDeviceOne对比
  • Spring声明式事务管理之一:五大属性分析
  • vue2.0项目引入element-ui
  • webpack4 一点通
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 诡异!React stopPropagation失灵
  • 聊聊sentinel的DegradeSlot
  • 每天一个设计模式之命令模式
  • 前端路由实现-history
  • 前端面试题总结
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 如何用vue打造一个移动端音乐播放器
  • 算法系列——算法入门之递归分而治之思想的实现
  • 学习笔记TF060:图像语音结合,看图说话
  • FaaS 的简单实践
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (C语言)fread与fwrite详解
  • (c语言)strcpy函数用法
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (分布式缓存)Redis分片集群
  • (分布式缓存)Redis哨兵
  • (接口封装)
  • (七)Java对象在Hibernate持久化层的状态
  • (三)elasticsearch 源码之启动流程分析
  • (十三)Maven插件解析运行机制
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)Linux整合apache和tomcat构建Web服务器
  • .java 9 找不到符号_java找不到符号
  • .Mobi域名介绍
  • .NET Standard 的管理策略