您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關socket的io怎么應用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據(jù)這篇文章可以有所收獲。
Socket.IO支持及時、雙向與基于事件的交流。它可以在每個平臺、每個瀏覽器和每個設備上工作,可靠性和速度同樣穩(wěn)定。
實時分析:將數(shù)據(jù)推送到客戶端,這些客戶端會被表示為實時計數(shù)器,圖表或日志客戶。
實時通信和聊天:只需幾行代碼便可寫成一個Socket.IO的”Hello,World”聊天應用。
二進制流傳輸:從1.0版本開始,Socket.IO支持任何形式的二進制文件傳輸,例如:圖片,視頻,音頻等。
文檔合并:允許多個用戶同時編輯一個文檔,并且能夠看到每個用戶做出的修改。
服務端與客戶端連接
socket.io同時提供了服務端和客戶端的API
服務端socket.io必須綁定一個http.Server實例
綁定http.Server
1、隱式綁定
通過實例化時傳入端口或實例化后調用listen或attach函數(shù)進行隱式綁定。socket.io內部實例化并監(jiān)聽http.Server
實例化時傳入端口
let io = require('socket.io')(3000)
直接通過listen或attach函數(shù)綁定。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)
監(jiān)聽連接狀態(tài)
當服務器端與客戶端連接成功時,服務端會監(jiān)聽到connection和connect事件(connection與connect同義), 客戶端會監(jiān)聽到connect事件, 斷開連接時服務端的對應到客戶端的socket與客戶端均會均會監(jiān)聽到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
傳輸數(shù)據(jù)
服務器與客戶端的socket是一個關聯(lián)的EventEmitter對象,客戶端socket派發(fā)的事件可以通以被服務端的socket接收,服務器端socket派發(fā)的事件也可以被客戶端接受?;谶@種機制,可以實現(xiàn)雙向交流。
現(xiàn)在模擬這樣一種情況:客戶端不停發(fā)送隨機數(shù),當隨機數(shù)大于0.95時,服務端延時1s后向客戶端發(fā)送警告以及警告次數(shù)
服務端代碼
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對象可以用來存儲狀態(tài)信息和自定義數(shù)據(jù),如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怎么應用有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。