返回顶部
首页 > 资讯 > 前端开发 > node.js >socket.io学习教程之基本应用(二)
  • 234
分享到

socket.io学习教程之基本应用(二)

教程socketio 2022-06-04 17:06:30 234人浏览 安东尼
摘要

前言 Socket.io支持及时、双向与基于事件的交流。它可以在每个平台、每个浏览器和每个设备上工作,可靠性和速度同样稳定。 实时分析:将数据推送到客户端,这些客户端会被表示为实时计数器,图表或日志客

前言

Socket.io支持及时、双向与基于事件的交流。它可以在每个平台、每个浏览器和每个设备上工作,可靠性和速度同样稳定。

实时分析:将数据推送到客户端,这些客户端会被表示为实时计数器,图表或日志客户。 实时通信和聊天:只需几行代码便可写成一个Socket.IO的”Hello,World”聊天应用。 二进制流传输:从1.0版本开始,Socket.IO支持任何形式的二进制文件传输,例如:图片,视频,音频等。 文档合并:允许多个用户同时编辑一个文档,并且能够看到每个用户做出的修改。

服务端与客户端连接

socket.io同时提供了服务端和客户端的api

服务端socket.io必须绑定一个Http.Server实例

绑定http.Server

1、隐式绑定

通过实例化时传入端口或实例化后调用listen或attach函数进行隐式绑定。socket.io内部实例化并监听http.Server

实例化时传入端口


let io = require('socket.io')(3000)

直接通过listen或attach函数绑定。listen与attach同义


let io = require('socket.io') 
io.listen(3000) // io.attach(3000) 

2、显示绑定

可以手动指定http.Server

实例化时绑定


let server = require('http').Server(); 
let io = require('socket.io')(server)

server.listen(3000) 

通过listen或attach绑定


let server = require('http').Server(); 
let io = require('socket.io')()

io.listen(server) // io.attach(server)

server.listen(3000) 

可以绑定express或koa等http框架

express


let app = require('express') 
let server = require('http').Server(app) 
let io = require('socket.io')(server)

app.listen(3000) 

koa


let app = require('koa')() 
let server = require('http').Server(app.callback())

let io = require('socket.io')(server)

app.listen(3000) 

监听连接状态

服务器端与客户端连接成功时,服务端会监听到connection和connect事件(connection与connect同义), 客户端会监听到connect事件, 断开连接时服务端的对应到客户端的socket与客户端均会均会监听到disconnect事件

服务端代码


let server = require('http').Server() 
let io = require('socket.io')(server)

server.listen(3000); 
io.on('connection', socket => { 
 console.log('connect')
 socket.on('disconnect', () => {
 console.log('disconnect')
 })
 socket.disconnect()
})

运行后打印


connect 
disconnect 

客户端代码


let socket = io('http://localhost:3000') 
socket.on('connect', () => { 
 console.log('connect')
})
socket.on('disconnect', () => { 
 console.log('disconnect')
})

运行后打印


connect 
disconnect 

传输数据

服务器与客户端的socket是一个关联的EventEmitter对象,客户端socket派发的事件可以通以被服务端的socket接收,服务器端socket派发的事件也可以被客户端接受。基于这种机制,可以实现双向交流。

现在模拟这样一种情况:客户端不停发送随机数,当随机数大于0.95时,服务端延时1s后向客户端发送警告以及警告次数

服务端代码


let server = require('http').Server() 
let io = require('socket.io')(server)

server.listen(3000); 
io.on('connection', socket => { 
 socket.on('random', value => {
 console.log(value)
 if (value > 0.95) {
  if (typeof socket.warning === 'undefined') socket.warning = 0
  setTimeout(() => {
  socket.emit('warn', ++socket.warning)
  }, 1000)
 }
 })
})

socket对象可以用来存储状态信息和自定义数据,如socket.warning

客户端代码


let socket = io('http://localhost:3000') 
let interval = setInterval(() => { 
 socket.emit('random', Math.random())
}, 500)
socket.on('warn', count => { 
 console.log('warning count: ' + count)
})
socket.on('disconnect', () => { 
 clearInterval(interval)
})

传输流

socket.io可以处理流

服务端代码


io.on('connection', function (socket) { 
 let stream = ss.createStream()
 ss(socket).emit('script', stream)
 fs.createReadStream(__filename).pipe(stream)
})

客户端代码


let socket = io('http://localhost:3000') 
ss(socket).on('script', stream => { 
 let buffer = '' 
 stream.on('data', data => {
 buffer += data.toString()
 })
 stream.on('end', () => {
 console.log(buffer)
 })
})

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程网的支持。

--结束END--

本文标题: socket.io学习教程之基本应用(二)

本文链接: https://lsjlt.com/news/12623.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • socket.io学习教程之基本应用(二)
    前言 Socket.IO支持及时、双向与基于事件的交流。它可以在每个平台、每个浏览器和每个设备上工作,可靠性和速度同样稳定。 实时分析:将数据推送到客户端,这些客户端会被表示为实时计数器,图表或日志客...
    99+
    2022-06-04
    教程 socket io
  • socket.io学习教程之基础介绍(一)
    前言 Web端与服务器间的实时数据传输的是一个很重要的需求,但最早只能通过AJAX轮询询实现。在WebSocket标准没有推出之前,AJAX轮询是唯一可行的方式(通过Flash浏览器也可以,但这里不做讨论...
    99+
    2022-06-04
    基础 教程 socket
  • socket.io学习教程之深入学习篇(三)
    前言 socket.io提供了基于事件的实时双向通讯,本文深入的介绍了socket.io,下面来看看详细的内容吧。 静态文件 socket.io默认情况下会通过socket.io-client包提供soc...
    99+
    2022-06-04
    教程 socket io
  • python爬虫框架Scrapy基本应用学习教程
    在正式编写爬虫案例前,先对 scrapy 进行一下系统的学习。 scrapy 安装与简单运行 使用命令 pip install scrapy 进行安装,成功之后,还需要随手收藏几个网...
    99+
    2024-04-02
  • Netty学习教程之基础使用篇
    什么Netty?Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端编程框架...
    99+
    2023-05-31
    netty 基础
  • Python基础学习教程:Python基础之基本数据类型(一)
    Python基础学习教程:Python基础之基本数据类型(一)...
    99+
    2023-06-02
  • CISP-PTE学习总结之基础练习题(二)
    文章目录 基础题目一:SQL注入0x01 题目要求0x02 解题过程 基础题目二:文件上传突破0x01 题目要求0x02 解题过程 基础题目...
    99+
    2023-10-03
    数据库 sql mysql
  • 【python学习】新手基础程序练习(二
    Ι  继续上一节得内容,这里主要是对各种知识的理解以及如何运用。 一、执行 Python 脚本的两种方式 1.把python执行文件加到计算机的环境变量中,然后新建文件把程序写在新文件里,再通过cmd命令打开命令提示符终端,输入pytho...
    99+
    2023-01-30
    新手 基础 程序
  • (二)《SQL进阶教程》学习记录-
    GROUP BY、PARTITION BY,分组取前几条,分组完整记录,排名、排序 (一) 《SQL进阶教程》学习记录--CASE (二) 《SQL进阶教程》学习记录--GROUP BY、PA...
    99+
    2016-09-20
    (二)《SQL进阶教程》学习记录-
  • Android二维码开发学习教程
    二维码其实有很多种,但是我们常见的微信使用的是一种叫做QRCode的二维码,像下面这样的,可以放心的扫,这只是我的博客主页链接啦:   关于QR码编码的二维码,我们...
    99+
    2022-06-06
    开发学习 学习 教程 Android
  • kotlin 官方学习教程之基础语法详解
    kotlin 官方学习教程之基础语法详解Google 在今天的举行了 I/O 大会,大会主要主要展示内有容 Android O(Android 8.0)系统、Google Assistant 语音助手、Google 智能音箱、人工智能、机器...
    99+
    2023-05-31
    kotlin 教程
  • Android学习之4种基本布局
    线性布局 简单地说就是控件或者布局按照水平方向或者垂直方向依次排列! 垂直方向 标签内属性为 android:orientation="vert...
    99+
    2022-06-06
    android学习 布局 Android
  • InfluxDB学习之InfluxDB的基本概念
    一、与传统数据库中的名词做比较nfluxDB中的名词传统数据库中的概念database数据库measurement数据库中的表points表里面的一行数据 二、InfluxDB中独有的概念1)da...
    99+
    2024-04-02
  • InfluxDB学习之InfluxDB的基本操作
    InfluxDB 是一个开源分布式时序、事件和指标数据库。使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。它有三大特性:1. Time Series (时间序列):你可以使用与时间...
    99+
    2024-04-02
  • MySQL基础学习之字符集的应用
    目录字符集的查询与修改字符集比较规则utf8mb3和 utf8mb4比较规则后缀含义字符集常用SQL字符集的查询与修改 在mysql 8.0版本之前, 默认字符集是latin1, 使用默认字符集的时候输入中文会出现乱码问...
    99+
    2023-05-16
    MySQL字符集应用 MySQL字符集 MySQL基础
  • Python常用算法学习基础教程
    本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制...
    99+
    2022-06-04
    算法 基础教程 常用
  • PHP之Swoole学习安装教程
    目录一、前言二、Swoole 环境搭建2.1 PHP Installation 2.2 Swoole Installation2.3 开发工具提示包一、前言 s...
    99+
    2024-04-02
  • 从头到尾学习 Python 应用程序打包教程,Windows 版本!
    Python 是一种高级编程语言,许多开发者使用它来创建各种应用程序。如果你正在使用 Python 编写应用程序,你可能已经知道如何在自己的计算机上运行它们。但是,当你想与别人分享你的应用程序时,你需要将它们打包成可执行文件。在本文中,我们...
    99+
    2023-06-17
    windows 打包 教程
  • 微信小程序学习之wxs使用教程
    什么是wxs? wxs(WeiXin Script)是小程序的一套脚本语言, 结合WXML, 可以构建出页面结构. wxs标签 <wxs module="uti...
    99+
    2024-04-02
  • Python学习入门基础教程(learn
     在Python里可以自定义函数,实现某特定功能,这里首先要区分一下函数的定义和函数的调用两个基本概念,初学者往往容易混淆。      函数的定义是指将一堆能实现特定功能的语句用一个函数名标识起来,而函数的调用则是通过函数名来使用这一堆语句...
    99+
    2023-01-31
    基础教程 入门 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作