Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

How to apply io of socket

2025-03-26 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >

Share

Shulou(Shulou.com)06/03 Report--

今天就跟大家聊聊有关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) })})看完上述内容,你们对socket的io怎么应用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Development

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report