中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

socket的io怎么應用

發布時間:2021-09-15 11:26:56 來源:億速云 閱讀:131 作者:柒染 欄目:web開發

今天就跟大家聊聊有關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怎么應用有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

库伦旗| 新化县| 方正县| 开封县| 定西市| 疏勒县| 顺义区| 古丈县| 建昌县| 柳林县| 鄂温| 炉霍县| 邵阳市| 阳原县| 景谷| 洛阳市| 双城市| 张家界市| 绥棱县| 昭觉县| 成安县| 铜鼓县| 改则县| 湖州市| 天柱县| 东乡| 孙吴县| 陆良县| 沧州市| 七台河市| 临泽县| 和田市| 启东市| 崇明县| 霍山县| 嘉定区| 岳西县| 太原市| 巫山县| 若尔盖县| 紫云|