超簡單實例使用websocket進(jìn)行server和client實時通信

  • server端
//app.js
var ws = require('nodejs-websocket');

var server = ws.createServer(function(conn){
    console.log('connected');
    conn.on('text',function(str){
        console.log(str);
        //conn.sendText(str);//將接收道德str用sendText方法傳給接收到的一個連接
        //boardcast(str);//調(diào)用廣播方法將節(jié)后到的傳給所有的瀏覽器

        var data = JSON.parse(str);
        switch (data.type){
            case 'chat':
                //boardcast(conn.nickname + '說:' + data.text);
                boardcast(JSON.stringify({name:conn.nickname,text:conn.nickname + '說:' + data.text}));
                break;                
            case 'setname':
                conn.nickname = data.name;
                //boardcast(data.name+'加入了房間');
                boardcast(JSON.stringify({text:data.name+'加入了房間',name:conn.nickname}));
                break;
        }
            
    });
    // setTimeout(function(){
    //     conn.sendText('來自服務(wù)端的消息!');
    // },3000);
    conn.on('close',function(){
        boardcast(JSON.stringify({name:conn.nickname,text:conn.nickname+'退出了房間'}));
    });
    conn.on('error',function(err){
        console.log(err);
    });
}).listen(2333);

/**
 * 這個connections是一個數(shù)組包含我們所有的連接
 */
//我們來寫一個廣播吧
function boardcast(str){
    server.connections.forEach((conn) => {
        conn.sendText(str);
    });
}
//index.html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
 
    <title>測試一下websocket</title>
  </head>
  <body>
    
  <input id='name' type='text'>
  <button id='setname' type='button'>設(shè)置</button>

    <input id='text' type='text'>
    <button id='btn' type='submit'>發(fā)送</button>
    <div id="root"></div>
    <script>
        var ws = null;
        document.getElementById('setname').onclick = function() {
          var name = document.getElementById('name').value;
          if(name === null){
            alert('注意用戶名不能為空');
          }
          console.log(name);
          ws =new WebSocket('ws://localhost:2333');
          ws.onopen = function (){          
            ws.send(JSON.stringify({name:name,type:'setname'}));
            document.getElementById('btn').onclick = () => {
              //console.log(document.getElementById('text').value);
              ws.send(JSON.stringify({text:document.getElementById('text').value,type:'chat'}));
            }  
          }
          ws.onmessage = function (e){
          //console.log(e.data);
            //document.body.innerHTML += '<p>'+e.data + '</p>';
            // var p =document.createElement('p');
            // p.innerHTML = e.data;
            document.getElementById('root').appendChild(createChatPanel(JSON.parse(e.data)));
          }
           document.getElementById('setname').style.display = 'none';
        }
        function createChatPanel(data){
          var name = data.name;
          var text = data.text;
          var div = document.createElement('div');
          var p1 = document.createElement('p');
          var p2 = document.createElement('p');
          p1.innerHTML = name + ":" + (new Date()).toString();
          p2.innerHTML = text;
          p1.style.color = 'green';
          div.appendChild(p1);
          div.appendChild(p2);
          return div;
          
        }
    </script>

  </body>
</html>

github鏈接:https://github.com/smileyqp/websocketUsage

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市竟宋,隨后出現(xiàn)的幾起案子提完,更是在濱河造成了極大的恐慌,老刑警劉巖丘侠,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件徒欣,死亡現(xiàn)場離奇詭異,居然都是意外死亡蜗字,警方通過查閱死者的電腦和手機(jī)打肝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挪捕,“玉大人粗梭,你說我怎么就攤上這事〖读悖” “怎么了断医?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我鉴嗤,道長斩启,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任醉锅,我火速辦了婚禮浇垦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荣挨。我一直安慰自己,他們只是感情好朴摊,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布默垄。 她就那樣靜靜地躺著,像睡著了一般甚纲。 火紅的嫁衣襯著肌膚如雪口锭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天介杆,我揣著相機(jī)與錄音鹃操,去河邊找鬼。 笑死春哨,一個胖子當(dāng)著我的面吹牛荆隘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赴背,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼椰拒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了凰荚?” 一聲冷哼從身側(cè)響起燃观,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎便瑟,沒想到半個月后缆毁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡到涂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年脊框,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片践啄。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡缚陷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出往核,到底是詐尸還是另有隱情箫爷,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站虎锚,受9級特大地震影響硫痰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窜护,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一效斑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柱徙,春花似錦缓屠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至羊初,卻和暖如春滨溉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背长赞。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工晦攒, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人得哆。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓脯颜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贩据。 傳聞我的和親對象是個殘疾皇子伐脖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 對于初一的孩子最重要的是行為習(xí)慣養(yǎng)成,包括衛(wèi)生習(xí)慣乐设,可以細(xì)到整理課桌讼庇,指甲干凈程度,(每天安排兩名同學(xué)檢查近尚,推選出...
    black向著陽光閱讀 162評論 0 0
  • 春天來了蠕啄,大雁從南方飛回來了。路邊的花開了戈锻,草也綠了歼跟。春天真是個美麗的季節(jié)啊。
    榮賢閱讀 88評論 0 0
  • 攝影小記者們在風(fēng)景如畫的蓮花山進(jìn)行了項目展示格遭,小記者們通過繪畫,戲劇,PPT等多種方式呈現(xiàn)哈街,我們一起來看看吧...
    紫羅蘭_6801閱讀 191評論 0 0
  • MYSQL中NOW、CURRENT_TIMESTAMP作箍、SYSDATE的區(qū)別 執(zhí)行上邊的SQL硬梁,結(jié)果如下: 這三個...
    _小老虎_閱讀 1,387評論 0 0