最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

socket.io學(xué)習(xí)教程之基本應(yīng)用(二)

 更新時(shí)間:2017年04月29日 16:58:32   作者:sigoden  
socket.io提供了基于事件的實(shí)時(shí)雙向通訊,下面這篇文章主要給大家介紹了socket.io基本應(yīng)用的相關(guān)資料,對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。

前言

Socket.IO支持及時(shí)、雙向與基于事件的交流。它可以在每個(gè)平臺(tái)、每個(gè)瀏覽器和每個(gè)設(shè)備上工作,可靠性和速度同樣穩(wěn)定。

  • 實(shí)時(shí)分析:將數(shù)據(jù)推送到客戶端,這些客戶端會(huì)被表示為實(shí)時(shí)計(jì)數(shù)器,圖表或日志客戶。
  • 實(shí)時(shí)通信和聊天:只需幾行代碼便可寫成一個(gè)Socket.IO的”Hello,World”聊天應(yīng)用。
  • 二進(jìn)制流傳輸:從1.0版本開始,Socket.IO支持任何形式的二進(jìn)制文件傳輸,例如:圖片,視頻,音頻等。
  • 文檔合并:允許多個(gè)用戶同時(shí)編輯一個(gè)文檔,并且能夠看到每個(gè)用戶做出的修改。

服務(wù)端與客戶端連接

socket.io同時(shí)提供了服務(wù)端和客戶端的API

服務(wù)端socket.io必須綁定一個(gè)http.Server實(shí)例

綁定http.Server

1、隱式綁定

通過實(shí)例化時(shí)傳入端口或?qū)嵗笳{(diào)用listen或attach函數(shù)進(jìn)行隱式綁定。socket.io內(nèi)部實(shí)例化并監(jiān)聽http.Server

實(shí)例化時(shí)傳入端口

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

直接通過listen或attach函數(shù)綁定。listen與attach同義

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

2、顯示綁定

可以手動(dòng)指定http.Server

實(shí)例化時(shí)綁定

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)

當(dāng)服務(wù)器端與客戶端連接成功時(shí),服務(wù)端會(huì)監(jiān)聽到connection和connect事件(connection與connect同義), 客戶端會(huì)監(jiān)聽到connect事件, 斷開連接時(shí)服務(wù)端的對應(yīng)到客戶端的socket與客戶端均會(huì)均會(huì)監(jiān)聽到disconnect事件

服務(wù)端代碼

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

運(yùn)行后打印

connect 
disconnect 

客戶端代碼

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

運(yùn)行后打印

connect 
disconnect 

傳輸數(shù)據(jù)

服務(wù)器與客戶端的socket是一個(gè)關(guān)聯(lián)的EventEmitter對象,客戶端socket派發(fā)的事件可以通以被服務(wù)端的socket接收,服務(wù)器端socket派發(fā)的事件也可以被客戶端接受。基于這種機(jī)制,可以實(shí)現(xiàn)雙向交流。

現(xiàn)在模擬這樣一種情況:客戶端不停發(fā)送隨機(jī)數(shù),當(dāng)隨機(jī)數(shù)大于0.95時(shí),服務(wù)端延時(shí)1s后向客戶端發(fā)送警告以及警告次數(shù)

服務(wù)端代碼

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對象可以用來存儲(chǔ)狀態(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可以處理流

服務(wù)端代碼

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • nvm、nrm、npm 安裝和使用詳解(小結(jié))

    nvm、nrm、npm 安裝和使用詳解(小結(jié))

    這篇文章主要介紹了nvm、nrm、npm 安裝和使用詳解(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • 淺談NodeJS中require路徑問題

    淺談NodeJS中require路徑問題

    學(xué)習(xí)Nodejs也是出于對這個(gè)新產(chǎn)物的好奇,而且有兩個(gè)重要項(xiàng)目也需要他的支持,所以要好好學(xué)學(xué)這個(gè)新語種。在nodejs中,模塊大概可以分為核心模塊和文件模塊。核心模塊是被編譯成二進(jìn)制代碼,引用的時(shí)候只需require表示符即可
    2015-05-05
  • node中http模塊的使用及執(zhí)行流程

    node中http模塊的使用及執(zhí)行流程

    http這個(gè)模塊的職責(zé)就是幫你創(chuàng)建編寫服務(wù)器,接下來通過本文給大家介紹node中http模塊的使用及執(zhí)行流程,感興趣的朋友一起看看吧
    2021-09-09
  • 前端node Session和JWT鑒權(quán)登錄示例詳解

    前端node Session和JWT鑒權(quán)登錄示例詳解

    關(guān)于前端鑒權(quán)登錄是比較常見的需求了,本文將從服務(wù)端渲染和前后端分離的不同角度下演示鑒權(quán),為大家介紹前端node Session和JWT鑒權(quán)登錄示例詳解
    2022-07-07
  • Node.js API詳解之 tty功能與用法實(shí)例分析

    Node.js API詳解之 tty功能與用法實(shí)例分析

    這篇文章主要介紹了Node.js API詳解之 tty功能與用法,結(jié)合實(shí)例形式分析了Node.js API中tty的基本功能、用法及終端操作相關(guān)使用技巧,需要的朋友可以參考下
    2020-04-04
  • Node.js調(diào)用DeepSeek?API的完整指南

    Node.js調(diào)用DeepSeek?API的完整指南

    本文將介紹如何使用?Node.js?調(diào)用?DeepSeek?API,實(shí)現(xiàn)流式對話并保存對話記錄,Node.js?版本使用現(xiàn)代異步編程方式實(shí)現(xiàn),支持流式處理和錯(cuò)誤處理,文章通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • node.js-path模塊你了解多少

    node.js-path模塊你了解多少

    這篇文章主要為大家詳細(xì)介紹了node.js-path模塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • NVM管理node版本以及報(bào)錯(cuò)解決

    NVM管理node版本以及報(bào)錯(cuò)解決

    在開發(fā)過程中有時(shí)候會(huì)遇到老項(xiàng)目和新項(xiàng)目node版本不一致的情況,這篇文章主要給大家介紹了關(guān)于NVM管理node版本以及報(bào)錯(cuò)解決方法的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • node.js中的url.resolve方法使用說明

    node.js中的url.resolve方法使用說明

    這篇文章主要介紹了node.js中的url.resolve方法使用說明,本文介紹了url.resolve的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node.js中 mysql 增刪改查操作及async,await處理實(shí)例分析

    node.js中 mysql 增刪改查操作及async,await處理實(shí)例分析

    這篇文章主要介紹了node.js中 mysql 增刪改查操作及async,await處理,結(jié)合實(shí)例形式分析了node.js中 mysql庫安裝、增刪改查操作及async,await處理相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2020-02-02

最新評論

银川市| 威宁| 柯坪县| 吴忠市| 丰原市| 通河县| 武定县| 宾阳县| 南乐县| 安庆市| 枣阳市| 乐清市| 从化市| 宣汉县| 夏邑县| 景东| 新竹县| 改则县| 西和县| 武胜县| 稷山县| 陇川县| 青海省| 陇南市| 武威市| 白城市| 任丘市| 南平市| 荔波县| 确山县| 阳曲县| 开平市| 青岛市| 齐河县| 兴宁市| 綦江县| 酒泉市| 镇平县| 东明县| 北碚区| 沂水县|