国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 15:15:05
字體:
供稿:網(wǎng)友

真心佩服那些可以經(jīng)常發(fā)布筆記的人,其實我也想經(jīng)常發(fā)來的,奈何技術(shù)不夠加上懶,要向大神們多多學(xué)習(xí)了,前段時間有用bomb平臺自帶的socket寫一個聊天室,其實基本就是改了改它的demo,這次想實現(xiàn)一個隨機私聊,所以自己基于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ā)給他就好了。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 玛曲县| 牙克石市| 四子王旗| 玛多县| 凤台县| 桑日县| 金湖县| 桂平市| 海淀区| 许昌市| 紫阳县| 旅游| 全南县| 江北区| 班玛县| 平利县| 济南市| 正蓝旗| 通渭县| 体育| 乐至县| 浙江省| 毕节市| 绥宁县| 曲靖市| 玛多县| 五家渠市| 巴彦淖尔市| 河间市| 德兴市| 茶陵县| 普定县| 东方市| 万载县| 井研县| 介休市| 龙泉市| 修武县| 兴宁市| 阿坝县| 兴国县|