欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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

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

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

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

綁定http.Server

1、隱式綁定

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

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

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

直接通過(guò)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) 

通過(guò)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īng)連接狀態(tài)

當(dāng)服務(wù)器端與客戶(hù)端連接成功時(shí),服務(wù)端會(huì)監(jiān)聽(tīng)到connection和connect事件(connection與connect同義), 客戶(hù)端會(huì)監(jiān)聽(tīng)到connect事件, 斷開(kāi)連接時(shí)服務(wù)端的對(duì)應(yīng)到客戶(hù)端的socket與客戶(hù)端均會(huì)均會(huì)監(jiān)聽(tīng)到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 

客戶(hù)端代碼

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ù)器與客戶(hù)端的socket是一個(gè)關(guān)聯(lián)的EventEmitter對(duì)象,客戶(hù)端socket派發(fā)的事件可以通以被服務(wù)端的socket接收,服務(wù)器端socket派發(fā)的事件也可以被客戶(hù)端接受?;谶@種機(jī)制,可以實(shí)現(xiàn)雙向交流。

現(xiàn)在模擬這樣一種情況:客戶(hù)端不停發(fā)送隨機(jī)數(shù),當(dāng)隨機(jī)數(shù)大于0.95時(shí),服務(wù)端延時(shí)1s后向客戶(hù)端發(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對(duì)象可以用來(lái)存儲(chǔ)狀態(tài)信息和自定義數(shù)據(jù),如socket.warning

客戶(hù)端代碼

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

客戶(hù)端代碼

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

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

相關(guān)文章

  • NodeJS制作爬蟲(chóng)全過(guò)程(續(xù))

    NodeJS制作爬蟲(chóng)全過(guò)程(續(xù))

    本文是接上篇NodeJS制作爬蟲(chóng)全過(guò)程,是最上文的一個(gè)補(bǔ)充以及優(yōu)化,給需要的小伙伴參考下
    2014-12-12
  • 使用node搭建自動(dòng)發(fā)圖文微博機(jī)器人的方法

    使用node搭建自動(dòng)發(fā)圖文微博機(jī)器人的方法

    這篇文章主要介紹了使用node搭建自動(dòng)發(fā)圖文微博機(jī)器人的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • yarn安裝路徑的成功修改并配置環(huán)境

    yarn安裝路徑的成功修改并配置環(huán)境

    Yarn是facebook發(fā)布的一款取代npm的包管理工具,下面這篇文章主要給大家介紹了關(guān)于yarn安裝路徑的成功修改并配置環(huán)境的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Windows 系統(tǒng)下設(shè)置Nodejs NPM全局路徑

    Windows 系統(tǒng)下設(shè)置Nodejs NPM全局路徑

    這篇文章主要介紹了Windows 系統(tǒng)下設(shè)置Nodejs NPM全局路徑
    2016-04-04
  • node.js使用express框架進(jìn)行文件上傳詳解

    node.js使用express框架進(jìn)行文件上傳詳解

    在本篇內(nèi)容里小編給大家整理了關(guān)于node.js使用express框架進(jìn)行文件上傳的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們跟著學(xué)習(xí)下。
    2019-03-03
  • 詳解nodejs 文本操作模塊-fs模塊(四)

    詳解nodejs 文本操作模塊-fs模塊(四)

    本篇文章詳細(xì)的講訴fa.fstat方法,這個(gè)State對(duì)象中,包含的數(shù)據(jù)都有哪些,并且他們分別代表的含義是什么。具有一定的參考價(jià)值,有興趣的可以了解一下。
    2016-12-12
  • node中如何使用redis的實(shí)現(xiàn)

    node中如何使用redis的實(shí)現(xiàn)

    本文主要介紹了node中如何使用redis的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • package-lock.json解決依賴(lài)的版本管理使用詳解

    package-lock.json解決依賴(lài)的版本管理使用詳解

    這篇文章主要為大家介紹了package-lock.json解決依賴(lài)的版本管理使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Mongoose實(shí)現(xiàn)虛擬字段查詢(xún)的方法詳解

    Mongoose實(shí)現(xiàn)虛擬字段查詢(xún)的方法詳解

    這篇文章主要給大家介紹了關(guān)于Mongoose實(shí)現(xiàn)虛擬字段查詢(xún)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • 使用Nodejs獲取bing每日?qǐng)D片

    使用Nodejs獲取bing每日?qǐng)D片

    這篇文章主要為大家詳細(xì)介紹了如何使用Nodejs獲取bing每日?qǐng)D片,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有興趣的小伙伴可以學(xué)習(xí)一下
    2023-12-12

最新評(píng)論