日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

HTML5 新特性 - WebSocket实现聊天(群聊天室、一对一聊天)

發(fā)布時(shí)間:2023/12/20 HTML 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTML5 新特性 - WebSocket实现聊天(群聊天室、一对一聊天) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

群聊天室

需求如下

  • 在聊天界面中建立websocket連接.

  • 一個(gè)客戶端發(fā)消息, 服務(wù)端接收消息后把消息分發(fā)給所有客戶端.

  • 客戶端接收服務(wù)端發(fā)回來的消息, 打印.(顯示在聊天記錄區(qū)域)

  • 提示當(dāng)前在線人數(shù).

  • 服務(wù)端中一旦接收到客戶端連接, 維護(hù)一個(gè)全局變量count, 記錄當(dāng)前在線人數(shù)(count++)

    // 聲明一個(gè)全局變量count, 用于保存當(dāng)前在線人數(shù) let count = 0 socketio.on('connection', (socket)=>{console.log('有客戶端連進(jìn)來了:'+socket.id)count++// 將count的值,給所有客戶端都發(fā)一遍socketio.emit('countmsg', count)// .... })
  • 當(dāng)服務(wù)端發(fā)現(xiàn)有客戶端斷開連接就需要讓count--

    // 監(jiān)聽socket連接的斷開, 一旦連接斷開, count--, 再給所有客戶端發(fā)一遍 socket.on('disconnect', ()=>{count--socketio.emit('countmsg', count) })
  • 無論count如何變化, 只要count有變化就需要將count實(shí)時(shí)發(fā)給所有客戶端.

  • 客戶端接收服務(wù)端發(fā)過來的消息countmsg. 將人數(shù)實(shí)時(shí)顯示在頁面中.

    // 監(jiān)聽服務(wù)端發(fā)給客戶端的count消息 ? 實(shí)時(shí)在線人數(shù) 更新界面 socket.on('countmsg', (data)=>{userNumber.innerHTML = data })
  • 登錄, 發(fā)消息時(shí)攜帶頭像/昵稱等參數(shù).

  • 一對一聊天的實(shí)現(xiàn)思路

  • 客戶端向服務(wù)端發(fā)送請求, 請求連接連接.

  • 服務(wù)端一旦監(jiān)聽到連接的建立, 將連接對象與客戶端id綁定在一起, 存起來.

  • 客戶端發(fā)消息時(shí)需要攜帶目標(biāo)用戶(發(fā)給誰):

    {name: 'zs', to:'目標(biāo)id', avatar:'a.jpg', content:'消息' }
  • 服務(wù)端接收到消息后, 解析出目標(biāo)用戶(目標(biāo)id), 找到當(dāng)時(shí)存儲的socket對象, 調(diào)用socket.emit()單獨(dú)給它發(fā)消息即可. 發(fā)消息時(shí)注意消息內(nèi)容:

    {from:'zs', content:'內(nèi)容', avatar:'a.jpg'}

  • 總結(jié)

    以上是生活随笔為你收集整理的HTML5 新特性 - WebSocket实现聊天(群聊天室、一对一聊天)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。