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

koa socket即時(shí)通訊的示例代碼

 更新時(shí)間:2018年09月07日 14:45:06   作者:xu52501  
這篇文章主要介紹了koa socket即時(shí)通訊的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

前言

http的特點(diǎn)是一問一答,而即時(shí)通訊是需要雙向通信的,這樣以前的即時(shí)通信只能使用輪詢的方式通過周期性的ajax請求獲取數(shù)據(jù),直到websocket出現(xiàn),就完美實(shí)現(xiàn)了雙向通信

一 即時(shí)通訊方式簡介

段輪詢

前臺(tái)使用setInterval進(jìn)行定時(shí)請求后臺(tái),這樣無疑非常浪費(fèi)性能

長輪詢和長連接(html5的EventSource)

客服端連接一次,服務(wù)端不斷開連接,服務(wù)端接收到新消息就發(fā)送給前臺(tái),客服端和服務(wù)端保持一直連接,缺點(diǎn)是只有服務(wù)端向客服端輸出

websocket

websocket不再是走h(yuǎn)ttp協(xié)議,而是升級為websocket協(xié)議,說到底就是走應(yīng)用層協(xié)議(tcp),實(shí)現(xiàn)雙向通信,缺點(diǎn)是兼容性問題(ie11)

socket.io

上面的方式都存在一定問題,自然就有人封裝一套完美的解決方案,socket.io就是集合了上面幾種方案的另一種解決方案

二 即時(shí)通信實(shí)現(xiàn)

客服端

引入包:<script src="https://cdn.socket.io/socket.io-1.2.1.js";></script>

服務(wù)端和客服端通過on和emit進(jìn)行交互

  1. emit表示發(fā)送,事件名自定義,另一端用on進(jìn)行接收
  2. on表示接受,類似jq綁定事件,事件名對應(yīng)emit事件名
  3. connect,disconnect是連接和斷開事件
 // 建立連接
 var socket= io('http://localhost:80')
 // on表示接收
 // emit表示發(fā)送
 socket.on('connect', function () {
 console.log('連接上了')
 // 登錄,同步前后端信息
 // 請求后端login接口,寫入socketid
 socket.emit('login', {
  // 身份標(biāo)識(shí),可以是時(shí)間戳或者唯一id,最要用來回去socketid進(jìn)行私聊
  id: username
 })
 })


 // 發(fā)送消息,這里可以用發(fā)送事件進(jìn)行消息發(fā)送
 socket.emit('sendMsg', {
 newAccount: 'xxxxxx'
 })
 
 // 接收消息
 socket.on('msg1', function (data) {
 // 可以對數(shù)據(jù)進(jìn)行渲染
 console.log(data)
 
 })
 socket.on('allmessage', function (data) {
 // 接收所有人消息
 console.log(data);

 })
 
 // 表示連接斷開了
 socket.on('disconnect', function () {
 console.log('聊天服務(wù)器斷開了')
 })

服務(wù)端(koa+koa-socket)

安裝koa-socket

npm i koa2 koa-socket -S
 const IO = require('koa-socket')
 const Koa = require('koa2')
 const io = new IO()
 
 const app = new Koa()
 
 // 將socket和app關(guān)聯(lián)
 io.attach(app)
 // 和客服端進(jìn)行連接
 io.on('connection', (context) => {
 console.log('連接上了')
 })
 // 接收消息
 io.on('sendMsg', function (context) {
 //console.log(context.data)
 // 向客服端實(shí)時(shí)發(fā)送消息
 io.broadcast('msg1', '我是服務(wù)器來的')

 // 廣播,所有人消息
 io.broadcast('allmessage', context.data.newAccount)
 })

 // 處理登陸同步信息
 io.on('login', context => {
 let id = context.data.id;
 console.log(context);
 });

總結(jié)

上面就是koa-socket使用的簡單介紹,只實(shí)現(xiàn)了簡單的消息推送和接收,后面還有私聊和群發(fā),其原理是獲取到每個(gè)用戶的socketid,發(fā)送消息時(shí)對應(yīng)發(fā)送,后面再進(jìn)行更新

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決下載了nodejs但npm?-v沒有反應(yīng)問題的全過程

    解決下載了nodejs但npm?-v沒有反應(yīng)問題的全過程

    最近工作中遇到了個(gè)問題,node安裝成功,但npm無法使用,所以下面這篇文章主要給大家介紹了關(guān)于下載了nodejs但npm?-v沒有反應(yīng)問題解決的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • node.js +mongdb實(shí)現(xiàn)登錄功能

    node.js +mongdb實(shí)現(xiàn)登錄功能

    這篇文章主要介紹了node.js +mongdb實(shí)現(xiàn)登錄功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Express框架定制路由實(shí)例分析

    Express框架定制路由實(shí)例分析

    這篇文章主要介紹了Express定制路由,結(jié)合實(shí)例形式分析了express框架定制路由原理、用法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2023-05-05
  • Node.js設(shè)置定時(shí)任務(wù)之node-schedule模塊的使用詳解

    Node.js設(shè)置定時(shí)任務(wù)之node-schedule模塊的使用詳解

    node-schedule是 Node.js 的一個(gè)定時(shí)任務(wù)(crontab)模塊。這篇文章主要介紹了Node.js設(shè)置定時(shí)任務(wù)之node-schedule模塊的使用,需要的朋友可以參考下
    2020-04-04
  • Linux CentOS系統(tǒng)下安裝node.js與express的方法

    Linux CentOS系統(tǒng)下安裝node.js與express的方法

    這篇文章主要給大家介紹了在Linux CentOS系統(tǒng)下安裝node.js與express的方法,文中介紹的非常詳細(xì),相信對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • express 項(xiàng)目分層實(shí)踐詳解

    express 項(xiàng)目分層實(shí)踐詳解

    這篇文章主要介紹了express 項(xiàng)目分層實(shí)踐詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • node.js中的fs.readdirSync方法使用說明

    node.js中的fs.readdirSync方法使用說明

    這篇文章主要介紹了node.js中的fs.readdirSync方法使用說明,本文介紹了fs.readdirSync方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 教你如何在Node.js中使用jQuery

    教你如何在Node.js中使用jQuery

    本文給大家分享的是如何在Node.js中使用jQuery的方法,包含步驟以及出錯(cuò)的處理,非常的詳細(xì),有需要的小伙伴可以參考下
    2016-08-08
  • 基于docker搭建node環(huán)境開發(fā)服務(wù)器全過程

    基于docker搭建node環(huán)境開發(fā)服務(wù)器全過程

    這篇文章主要給大家介紹了關(guān)于如何基于docker搭建node環(huán)境開發(fā)服務(wù)器的相關(guān)資料,本文將采用docker技術(shù)部署一個(gè)簡單的nodejs應(yīng)用,文中通過圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • vscode調(diào)試node.js的實(shí)現(xiàn)方法

    vscode調(diào)試node.js的實(shí)現(xiàn)方法

    這篇文章主要介紹了vscode調(diào)試node.js的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03

最新評論

洪湖市| 通化市| 莱阳市| 博罗县| 遂昌县| 新巴尔虎左旗| 河津市| 忻城县| 四平市| 平山县| 兴化市| 饶河县| 临邑县| 浦县| 阳春市| 丁青县| 昌邑市| 寿光市| 顺义区| 西畴县| 桂平市| 淮南市| 兴文县| 连江县| 沙雅县| 鲁甸县| 罗甸县| 双鸭山市| 仁怀市| 霞浦县| 许昌市| 鞍山市| 太仓市| 万年县| 秭归县| 东方市| 沧州市| 全椒县| 大丰市| 靖州| 龙泉市|