成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

socket.io之二: 基本應(yīng)用

ranwu / 1131人閱讀

摘要:提供了基于事件的實時雙向通訊服務(wù)端與客戶端連接同時提供了服務(wù)端和客戶端的服務(wù)端必須綁定一個實例綁定隱式綁定通過實例化時傳入端口或?qū)嵗笳{(diào)用或函數(shù)進(jìn)行隱式綁定。基于這種機(jī)制,可以實現(xiàn)雙向交流。

socket.io提供了基于事件的實時雙向通訊

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

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

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

綁定http.Server

隱式綁定

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

實例化時傳入端口

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

直接通過listenattach函數(shù)綁定。listenattach同義

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

顯示綁定

可以手動指定http.Server

實例化時綁定

let server = require("http").Server();
let io = require("socket.io")(server)

server.listen(3000)

通過listenattach綁定

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ù)器端與客戶端連接成功時,服務(wù)端會監(jiān)聽到connectionconnect事件(connection與connect同義), 客戶端會監(jiān)聽到connect事件, 斷開連接時服務(wù)端的對應(yīng)到客戶端的socket與客戶端均會均會監(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是一個關(guān)聯(lián)的EventEmitter對象,客戶端socket派發(fā)的事件可以通以被服務(wù)端的socket接收,服務(wù)器端socket派發(fā)的事件也可以被客戶端接受?;谶@種機(jī)制,可以實現(xiàn)雙向交流。

現(xiàn)在模擬這樣一種情況:客戶端不停發(fā)送隨機(jī)數(shù),當(dāng)隨機(jī)數(shù)大于0.95時,服務(wù)端延時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對象可以用來存儲狀態(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)
  })
})

更多文章的目錄在這里

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/82577.html

相關(guān)文章

  • socket.io原理和實戰(zhàn)

    摘要:就是為了解決這一問題產(chǎn)生的,現(xiàn)在已經(jīng)寫入標(biāo)準(zhǔn),主流瀏覽器基本支持。 由于最近寫項目要使用socekt.io技術(shù),于是研究了一段時間,把自己早期學(xué)習(xí)階段寫的小游戲改造了一下,變成了一個比較完整的小程序。點(diǎn)擊這里可以體驗游戲,建議使用手機(jī)模式查看,也可以下載打包好的webapp,安卓版已上架酷安市場,掃碼可下載體驗: showImg(https://segmentfault.com/img...

    ivyzhang 評論0 收藏0
  • 基于 socket.io 實現(xiàn)實時你畫我猜游戲

    摘要:演示地址實時畫板聊天室你畫我猜聊天室圖片搶先看解釋關(guān)于是基于實現(xiàn)的套接字前端后端數(shù)據(jù)交互的庫,通過它的封裝,使用者可以很方便的開發(fā),而且支持長輪詢等方法,兼容低版本瀏覽器。最后推薦一個實時的更加優(yōu)秀的游戲。 前言 一直都想好好的學(xué)習(xí)運(yùn)用node,一直都不知道要做什么東西,最近Java Web老師要求做個前端的應(yīng)用,既然是前端應(yīng)用,那肯定得是單頁應(yīng)用了,而且node很適用于高并發(fā)的實時應(yīng)...

    jsummer 評論0 收藏0
  • Node.js和Socket.IO搭建Web Chat application

    摘要:是,是的,它可以建立起一個基于事件的實時的雙向交流方式,極大的簡化了的處理過程。開始搭建這個應(yīng)用幾乎只需要和最初級的知識,因為只搭建一個基本的程序。安裝好后創(chuàng)建一個,來配置應(yīng)用。 WebSocket與Socket.IO WebSocket是一種協(xié)議,有了它就可以在TCP協(xié)議的基礎(chǔ)上在瀏覽器和服務(wù)器之間建立起了一種全雙工的通道,它完全兼容HTTP協(xié)議,有了它使得Web應(yīng)用程序可以在瀏覽器...

    kviccn 評論0 收藏0
  • socket.io之一: 介紹

    摘要:在標(biāo)準(zhǔn)沒有推出之前,輪詢是唯一可行的方式通過瀏覽器也可以,但這里不做討論。這種方式存在延時且對服務(wù)端造成很大負(fù)載。直到年,才標(biāo)準(zhǔn)化一種基于套接字進(jìn)行收發(fā)數(shù)據(jù)的協(xié)議?,F(xiàn)如今主流瀏覽器均已支持。 socket.io提供了基于事件的實時雙向通訊 歷史 Web端與服務(wù)器間的實時數(shù)據(jù)傳輸?shù)氖且粋€很重要的需求,但最早只能通過AJAX輪詢詢實現(xiàn)。在WebSocket標(biāo)準(zhǔn)沒有推出之前,AJAX輪詢是唯...

    william 評論0 收藏0
  • 一篇文章帶你徹底搞懂NIO

    摘要:阻塞當(dāng)進(jìn)行讀寫時,線程是阻塞的狀態(tài)。當(dāng)任何一個收到數(shù)據(jù)后,中斷程序?qū)酒疬M(jìn)程。接收數(shù)據(jù)當(dāng)收到數(shù)據(jù)后,中斷程序會給的就緒列表添加引用。當(dāng)接收到數(shù)據(jù),中斷程序一方面修改,另一方面喚醒等待隊列中的進(jìn)程,進(jìn)程再次進(jìn)入運(yùn)行狀態(tài)如下圖。 本篇文章目的在于基本概念和原理的解釋,不會貼過多的使用代碼。 什么是NIO Java NIO (New IO)是 Java 的另一個 IO API (來自 jav...

    ziwenxie 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<