socket.io 實現(xiàn)指定房間信息推送

訪問不同的roomId, 指定房間內(nèi)推送信息
http://localhost:3000/?roomId=15

瀏覽器端

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script type="text/javascript" src="http://localhost:3000/socket.io/socket.io.js"></script>
    </head>
    <body>
        <p>房間號碼:<em id="roomIdTxt"></em>號</p>
        <button id="btn1">登錄</button>
        <input id="text1" type="text" value="" placeholder="請輸入姓名" />
        <ol id="ol1"></ol>
    </body>
</html>
<script type="text/javascript">
    //獲取get中query參數(shù)妙痹,返回對象
    function getQuery(url){
        var _url = url || window.location.href;
        var _str = '';
        var res = {};
        if(_url.indexOf('?')!=-1){
            _str = _url.split('?')[1];
            if(_str.indexOf('&')!=-1){
                //多個值
                var _arr = _str.split('&');
                for(var i=0; i<_arr.length; i++){
                    var _temp = _arr[i];
                    if(_temp.indexOf('=')!=-1){
                        res[_temp.split('=')[0]] = _temp.split('=')[1];
                    }else{
                        continue;
                    }
                }
                return res;
            }else if(_str.indexOf('=')!=-1){
                //一個值
                res[_str.split('=')[0]] = _str.split('=')[1];
                return res;
            }
        }else{
            return null;
        }
    }
    
    var _querySrc = getQuery();
    if(_querySrc && _querySrc.roomId){
        _querySrc.roomId = _querySrc.roomId || 1;
        console.log('瀏覽器訪問的roomId:',_querySrc.roomId);  
    }
    //房間號文案
    document.getElementById('roomIdTxt').innerHTML = _querySrc.roomId;
    
    //roomId臨時寫死
    var socket = io.connect('http://localhost:3000?roomId='+_querySrc.roomId);
    
    //客戶端發(fā)送數(shù)據(jù)到服務(wù)器
    var oBtn = document.getElementById('btn1'); 
    var oText1 = document.getElementById('text1');
    oBtn.onclick = function(){
        if(oText1.value!=''){
            socket.emit('c2s',(oText1.value));
        }else{
            alert('輸入姓名锉试,再次登錄');
        }
    }
    
    //--dom操作 新增列表項目
    var listBox = document.getElementById('ol1');
    function addlist(data){
        var oLi = document.createElement('li');
        oLi.innerHTML = data;
        listBox.appendChild(oLi);
    }   
    
    //服務(wù)器到客戶端
    socket.on('s2c',function(data){
        addlist(data);
    });
    
</script>

服務(wù)器端

const http = require('http');
const fs = require('fs');
const url = require('url');

const App = http.createServer((req,res)=>{
    res.writeHead(200,{'Content-Type':'text/html;charset="utf-8"'});
    
    fs.readFile('./index.html',(err,data)=>{
        if(!err){
            res.write(data);
            res.end();
        }else{
            console.log('404');
            res.write('404');
            res.end();
        }
    })
})

const Io = require('socket.io')(App);
Io.on('connection',function(socket){
    console.log('有新的用戶訪問');
    //服務(wù)器端地址
    //http://localhost:3000/socket.io/socket.io.js
    
    
    var _url = url.parse(socket.request.url,true);
    var _roomId = '';
    if(_url.query.roomId){
        _roomId = _url.query.roomId;
    }
    
    //引入房間的概念,是"廣播"在小范圍內(nèi)使用
    if(_roomId){
        //加入房間
        socket.join(_roomId);
    }
    
    //服務(wù)器接收客戶端數(shù)據(jù)
    socket.on('c2s',function(data){
        console.log(data);
        
        //服務(wù)器給客戶端發(fā)送數(shù)據(jù)(點對點的方式)
        //socket.emit('s2c',('你好 '+data+' ,歡迎訪問我的網(wǎng)址'));
        
        //服務(wù)器給客戶端發(fā)送數(shù)據(jù)(對所有人廣播)
        if(!_roomId){
            Io.emit('s2c',('你們好 '+data+' ,歡迎訪問我的網(wǎng)址'));
        }
        
        //發(fā)送給指定房間
        if(_roomId){
            Io.to(_roomId).emit('s2c',(_roomId+'號房間,歡迎 '+data+'的來訪'));
        }
        
    });
    
});

App.listen(3000,function(){
    console.log('服務(wù)器地址','http://localhost:3000');
});

//http://localhost:3000/?roomId=1

package.json.js

{
  "name": "socketioDemo",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "socket.io": "^2.3.0"
  }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市狂秘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件春宣,死亡現(xiàn)場離奇詭異,居然都是意外死亡嫉你,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門躏惋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幽污,“玉大人,你說我怎么就攤上這事簿姨【辔螅” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵扁位,是天一觀的道長准潭。 經(jīng)常有香客問我,道長域仇,這世上最難降的妖魔是什么刑然? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮暇务,結(jié)果婚禮上泼掠,老公的妹妹穿的比我還像新娘。我一直安慰自己垦细,他們只是感情好择镇,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著括改,像睡著了一般腻豌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘱能,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天吝梅,我揣著相機與錄音,去河邊找鬼焰檩。 笑死憔涉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的析苫。 我是一名探鬼主播兜叨,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼穿扳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了国旷?” 一聲冷哼從身側(cè)響起矛物,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎跪但,沒想到半個月后履羞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡屡久,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年忆首,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片被环。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡糙及,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出筛欢,到底是詐尸還是另有隱情浸锨,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布版姑,位于F島的核電站柱搜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏剥险。R本人自食惡果不足惜聪蘸,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望表制。 院中可真熱鬧宇姚,春花似錦、人聲如沸夫凸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夭拌。三九已至魔熏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鸽扁,已是汗流浹背蒜绽。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留桶现,地道東北人躲雅。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像骡和,于是被迫代替她去往敵國和親相赁。 傳聞我的和親對象是個殘疾皇子相寇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355