国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

socket.io學習教程之基本應用(二)

2024-05-06 16:36:52
字體:
來源:轉載
供稿:網友

前言

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) })})

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长泰县| 双峰县| 利川市| 衢州市| 丹棱县| 鸡东县| 察哈| 临澧县| 龙泉市| 炎陵县| 大港区| 宣城市| 滕州市| 舞阳县| 西吉县| 保定市| 延长县| 泰安市| 读书| 汝城县| 高阳县| 南京市| 荔浦县| 石屏县| 武义县| 望江县| 平远县| 阳江市| 陆丰市| 梅州市| 绥芬河市| 云阳县| 揭东县| 胶南市| 兰坪| 漳浦县| 黄浦区| 广饶县| 黄浦区| 昌都县| 思茅市|