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

node.js + socket.io 實現(xiàn)點對點隨機(jī)匹配聊天

 更新時間:2017年06月30日 17:11:54   作者:藍(lán)水依依  
這篇文章主要介紹了node.js + socket.io 實現(xiàn)點對點隨機(jī)匹配聊天,具有一定的參考價值,感興趣的小伙伴們可以參考一下

真心佩服那些可以經(jīng)常發(fā)布筆記的人,其實我也想經(jīng)常發(fā)來的,奈何技術(shù)不夠加上懶,要向大神們多多學(xué)習(xí)了,前段時間有用bomb平臺自帶的socket寫一個聊天室,其實基本就是改了改它的demo,這次想實現(xiàn)一個隨機(jī)私聊,所以自己基于node 和 socket.io 來搭服務(wù),當(dāng)然,第一次用node做東西玩,雖然做的不好,但是也蠻分享下哈。

先說說用到的東西, node 用來做后臺服務(wù),express 用來托管靜態(tài)資源,然后socket.io 用來傳送聊天數(shù)據(jù)。接下來說說思路,其實用socket.io來傳數(shù)據(jù)是很簡單的一件事情,我們只需要再前端頁面引入 socket.io.js  然后再node端也require('socket.io'),把它在后端跑起來,那么前端就可以通過如下代碼來發(fā)送或者接收信息。

//前端
socket = io.connect('ws://'+'服務(wù)器ip');
socket.emit('msg',{msg:'前端要發(fā)送的信息'});//要發(fā)送的信息(以對象的形式發(fā)送)
socket.on('msg2',function(data){
  ...
  //這里的data是后端傳過來的信息
})
//后端
socket.on('msg',function(data){
  var data = data; //這里的data就是前端傳過來的數(shù)據(jù),即{msg:'前端要發(fā)送的信息'}
  console.log(data.msg) // 打印出 “前端要發(fā)送的信息”
})
//同理,后端要傳信息給前端也是一樣
socket.emit('msg2',{msg:'后端要發(fā)送的信息'});

我們來看后端怎么把socket跑起來

 var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
io.on('connection', function(socket){ //當(dāng)前端執(zhí)行 socket = io.connect('ws://'+host); 的時候,此處的io會監(jiān)聽到connection事件
 socket.on('msg',function(data){ 
 io.emit('onlineCount',freeList)
 //如果直接用io.emit來發(fā)送數(shù)據(jù)的話,這代表廣播的形式,就是當(dāng)前所有打開服務(wù)的前端頁面都會收到這條消息。
 
   socket.emit('welcome',{msg:'歡迎...'})//這里將給當(dāng)前連接的頁面發(fā)送一個歡迎的對象數(shù)據(jù)
 })
 socket.on('disconnect',function(){
 //當(dāng)前端頁面關(guān)閉,或者失去連接時,后端會接收到disconnect事件
   
 })

})
http.listen(4000, function(){
 console.log('listening on *:4000');
});

當(dāng)然不僅如此,因為websocket協(xié)議,是在瀏覽器和服務(wù)器之間建立了一個長鏈接來相互傳輸數(shù)據(jù),對服務(wù)器而言,如果打開了好幾個頁面,那么就有好幾個socket實例,每個建立連接的前端頁面都會有一個socket實例,這樣就為接下來的點對點私聊提供了思路。當(dāng)然,我們也可以通過直接廣播來傳送信息,不過這適用于聊天室情景。

那如何實現(xiàn)點對點呢,之前說了,每個建立連接的頁面都會產(chǎn)生一個socket實例,那么我們只需要后端在接收消息的同時,判斷該socket實例是和哪個個實例在聊天,只把消息發(fā)送給另一個匹配的socket實例就好了。簡單來說就像寫信一樣,我把消息發(fā)送給后端,然后告訴后端,這個消息是給xxx的,然后后端找到xxx對應(yīng)的socket實例,將消息發(fā)給他就好了。

//前端
window.id = new Date().getTime()+""+Math.floor(Math.random()*899+100);
//每次登錄,獲取一個唯一的用戶id
socket = io.connect('ws://'+host);
socket.emit('newUser',{ user_name : name, user_id : id})
//建立連接后,將我的用戶名和id都傳給后端

//后端
socket.on('newUser',function(data){
 var nickname = data.user_name,
  user_id = data.user_id;
 userServer[user_id] = socket;
 //后端接收后,將該用戶socket保存在一個對象里,key值為id,value就是這個用戶的socket
  
})

通過上面的代碼,后端得到了一個userServer的對象,里面是每個連接socket和其id的對應(yīng)值,這樣,就可以通過每次發(fā)送信息時,附帶要接收對象的id來達(dá)到點對點的數(shù)據(jù)傳輸。

接下來就是數(shù)據(jù)處理咯,如何取到對方的id啊等等,鑒于我表達(dá)能力有限,加上懶,就不啰嗦啦~~ 代碼我都托管在github歡迎自己下下來看咯~https://github.com/mikoshu/mychatroom.git

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

相關(guān)文章

  • express默認(rèn)日志組件morgan的方法

    express默認(rèn)日志組件morgan的方法

    morgan是express默認(rèn)的日志中間件,這篇文章主要介紹了express默認(rèn)日志組件morgan的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 深入淺析NodeJs并發(fā)異步的回調(diào)處理

    深入淺析NodeJs并發(fā)異步的回調(diào)處理

    這篇文章主要介紹了NodeJs并發(fā)異步的回調(diào)處理的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • 深入理解Puppeteer的入門教程和實踐

    深入理解Puppeteer的入門教程和實踐

    這篇文章主要介紹了深入理解Puppeteer的入門教程和實踐,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 詳解如何實現(xiàn)一個簡單的Node.js腳手架

    詳解如何實現(xiàn)一個簡單的Node.js腳手架

    本篇文章主要介紹了如何實現(xiàn)一個簡單的Node.js腳手架,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 詳解如何讓Express支持async/await

    詳解如何讓Express支持async/await

    本篇文章主要介紹了詳解如何讓Express支持async/await,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 使用node-media-server搭建一個簡易的流媒體服務(wù)器

    使用node-media-server搭建一個簡易的流媒體服務(wù)器

    這篇文章主要介紹了使用node-media-server搭建一個簡易的流媒體服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 基于Node.js實現(xiàn)nodemailer郵件發(fā)送

    基于Node.js實現(xiàn)nodemailer郵件發(fā)送

    Nodemailer 是一個簡單易用的 Node.JS 郵件發(fā)送模塊(通過 SMTP,sendmail,或者 Amazon SES),支持 unicode,你可以使用任何你喜歡的字符集。Nodemailer是一個簡單易用的Node.js郵件發(fā)送組件,需要的朋友可以參考下
    2016-01-01
  • 詳解使用抽象語法樹AST實現(xiàn)一個AOP切面邏輯

    詳解使用抽象語法樹AST實現(xiàn)一個AOP切面邏輯

    這篇文章主要為大家介紹了使用抽象語法樹AST實現(xiàn)一個AOP切面邏輯的簡單方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • npm全局環(huán)境變量配置詳解

    npm全局環(huán)境變量配置詳解

    這篇文章主要介紹了npm全局環(huán)境變量配置詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 基于NodeJS的前后端分離的思考與實踐(四)安全問題解決方案

    基于NodeJS的前后端分離的思考與實踐(四)安全問題解決方案

    本文就在前后端分離模式的架構(gòu)下,針對前端在Web開發(fā)中,所遇到的安全問題以及應(yīng)對措施和注意事項,并提出解決方案。
    2014-09-09

最新評論

房山区| 政和县| 衡东县| 上栗县| 凤城市| 清新县| 连江县| 崇信县| 玉林市| 乌拉特后旗| 上林县| 明星| 台山市| 元氏县| 大埔县| 苗栗县| 偃师市| 新郑市| 肇庆市| 浠水县| 东莞市| 青川县| 松滋市| 弋阳县| 灵台县| 衡阳市| 莆田市| 怀仁县| 乐东| 岫岩| 五台县| 凤冈县| 寿光市| 兰西县| 牡丹江市| 吉林市| 洛浦县| 绥中县| 康乐县| 长兴县| 祁阳县|