亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

nodejs實現的一個簡單聊天室功能分享

2024-05-06 16:11:32
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了nodejs實現的一個簡單聊天室功能分享,本文使用了express和socket.io兩個庫結合實現,需要的朋友可以參考下
 
 

今天我來實現一個簡單的聊天室,后臺用nodejs, 客戶端與服務端通信用socket.io,這是一個比較成熟的websocket框架.

初始工作

1.安裝express, 用這個來托管socket.io,以及靜態頁面,命令npm install express --save,--save可以使包添加到package.json文件里.
2.安裝socket.io,命令npm install socket.io --save.

編寫服務端代碼

首先我們通過express來托管網站,并附加到socket.io實例里,因為socket.io初次連接需要http協議

復制代碼代碼如下:

var express = require('express'),
    io = require('socket.io');

 

var app = express();

app.use(express.static(__dirname));

var server = app.listen(8888);


var ws = io.listen(server);


添加服務器連接事件,當客戶端連接成功之后,發公告告訴所有在線用戶,并且,當用戶發送消息時,發廣播通知其它用戶.
復制代碼代碼如下:

ws.on('connection', function(client){
    console.log('/033[96msomeone is connect/033[39m /n');
    client.on('join', function(msg){
        // 檢查是否有重復
        if(checkNickname(msg)){
            client.emit('nickname', '昵稱有重復!');
        }else{
            client.nickname = msg;
            ws.sockets.emit('announcement', '系統', msg + ' 加入了聊天室!');
        }
    });
    // 監聽發送消息
    client.on('send.message', function(msg){
        client.broadcast.emit('send.message',client.nickname,  msg);
    });
    // 斷開連接時,通知其它用戶
    client.on('disconnect', function(){
        if(client.nickname){
            client.broadcast.emit('send.message','系統',  client.nickname + '離開聊天室!');
        }
    })

 

})

 

由于客戶端是通過昵稱來標識的,所以服務端需要一個檢測昵稱重復的函數

 

復制代碼代碼如下:

// 檢查昵稱是否重復
var checkNickname = function(name){
    for(var k in ws.sockets.sockets){
        if(ws.sockets.sockets.hasOwnProperty(k)){
            if(ws.sockets.sockets[k] && ws.sockets.sockets[k].nickname == name){
                return true;
            }
        }
    }
    return false;
}

 

編寫客服端代碼

由于服務端采用第三方websokcet框架,所以前端頁面需要單獨引用socket.io客戶端代碼,源文件可以從socket.io模塊里找,windows下路徑為node_modules/socket.io/node_modules/socket.io-client/dist,這里有開發版和壓縮版的,默認引用開發版就行.

前端主要處理輸入昵稱檢查,消息處理,完整代碼如下:

 

復制代碼代碼如下:

<!DOCTYPE html>
<html>
<head>
    <title>socket.io 聊天室例子</title>
    <meta charset="utf-8">
    <link rel="stylesheet" href="css/reset.css"/>
    <link rel="stylesheet" href="css/bootstrap.css"/>
    <link rel="stylesheet" href="css/app.css"/>
</head>
<body>
    <div class="wrapper">
         <div class="content" id="chat">
             <ul id="chat_conatiner">
             </ul>
         </div>
         <div class="action">
             <textarea ></textarea>
             <button class="btn btn-success" id="clear">清屏</button>
             <button class="btn btn-success" id="send">發送</button>
         </div>
    </div>
    <script type="text/javascript" src="js/socket.io.js"></script>
    <script type="text/javascript">

 

          var ws = io.connect('http://172.16.2.184:8888');
          var sendMsg = function(msg){
              ws.emit('send.message', msg);
          }
          var addMessage = function(from, msg){
              var li = document.createElement('li');
              li.innerHTML = '<span>' + from + '</span>' + ' : ' + msg;
              document.querySelector('#chat_conatiner').appendChild(li);

              // 設置內容區的滾動條到底部
              document.querySelector('#chat').scrollTop = document.querySelector('#chat').scrollHeight;

              // 并設置焦點
              document.querySelector('textarea').focus();

          }

          var send = function(){
              var ele_msg = document.querySelector('textarea');
              var msg = ele_msg.value.replace('/r/n', '').trim();
              console.log(msg);
              if(!msg) return;
              sendMsg(msg);
              // 添加消息到自己的內容區
              addMessage('你', msg);
              ele_msg.value = '';
          }

          ws.on('connect', function(){
              var nickname = window.prompt('輸入你的昵稱!');
              while(!nickname){
                  nickname = window.prompt('昵稱不能為空,請重新輸入!')
              }
              ws.emit('join', nickname);
          });

          // 昵稱有重復
          ws.on('nickname', function(){
              var nickname = window.prompt('昵稱有重復,請重新輸入!');
              while(!nickname){
                  nickname = window.prompt('昵稱不能為空,請重新輸入!')
              }
              ws.emit('join', nickname);
          });

          ws.on('send.message', function(from, msg){
              addMessage(from, msg);
          });

          ws.on('announcement', function(from, msg){
              addMessage(from, msg);
          });

          document.querySelector('textarea').addEventListener('keypress', function(event){
              if(event.which == 13){
                  send();
              }
          });
          document.querySelector('textarea').addEventListener('keydown', function(event){
              if(event.which == 13){
                  send();
              }
          });
          document.querySelector('#send').addEventListener('click', function(){
              send();
          });

          document.querySelector('#clear').addEventListener('click', function(){
              document.querySelector('#chat_conatiner').innerHTML = '';
          });
    </script>
</body>
</html>

 

 

總結

nodejs是一個好東西,尤其是在處理消息通訊,網絡編程方面,天生的異步IO.


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

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧洲日韩成人av| 欧美日韩国产限制| 国产欧美一区二区白浆黑人| 91欧美精品成人综合在线观看| 久久国产精品久久久久久久久久| 亚洲香蕉av在线一区二区三区| 亚洲r级在线观看| 国产精品视频yy9099| 亚洲一区中文字幕在线观看| 国产精品三级美女白浆呻吟| 久久久免费精品| 日本免费久久高清视频| 国产精品久久久久久久久久99| 日韩精品久久久久久久玫瑰园| 久久久久www| 欧美又大又硬又粗bbbbb| 在线视频免费一区二区| 国产精品偷伦一区二区| 成人精品网站在线观看| 91精品综合久久久久久五月天| 国产精品99蜜臀久久不卡二区| 国产91精品最新在线播放| 欧美国产亚洲精品久久久8v| 亚洲一区二区三区四区视频| 久久成人这里只有精品| 色播久久人人爽人人爽人人片视av| 久久久av亚洲男天堂| 91精品国产综合久久久久久久久| 日韩精品免费观看| 亚洲电影免费观看高清完整版在线| 在线看片第一页欧美| xxav国产精品美女主播| 国产精品jizz在线观看麻豆| 另类色图亚洲色图| 精品欧美激情精品一区| 日韩精品免费电影| 日本欧美爱爱爱| 自拍偷拍亚洲在线| 亚洲国产天堂网精品网站| 日韩在线免费视频观看| 欧美中文在线视频| 人妖精品videosex性欧美| 色一情一乱一区二区| 国产大片精品免费永久看nba| 久久亚洲欧美日韩精品专区| 日韩视频免费看| 亚洲欧美在线看| 久久91亚洲精品中文字幕奶水| 在线观看免费高清视频97| 国内精品久久影院| 中文字幕一精品亚洲无线一区| 欧美日韩福利在线观看| 国产免费观看久久黄| 国内外成人免费激情在线视频| 精品日韩视频在线观看| 韩剧1988免费观看全集| 亚洲欧洲成视频免费观看| 国产福利视频一区| 亚洲欧美在线第一页| 超碰97人人做人人爱少妇| 精品久久久久久国产| 一区二区三区久久精品| 亚洲精品永久免费精品| 日韩高清电影免费观看完整版| 亚洲激情视频在线播放| 日韩激情片免费| 久久久久久久久久久久久久久久久久av| 黑人巨大精品欧美一区二区| 日韩国产欧美精品在线| 91亚洲国产精品| 欧美成人午夜剧场免费观看| 精品国模在线视频| 国语自产精品视频在线看一大j8| 久久成人人人人精品欧| 在线电影欧美日韩一区二区私密| 久久久久久噜噜噜久久久精品| 中文字幕最新精品| 久久久久久亚洲精品| 亚洲人成网站在线播| 久久久久久com| 久热精品视频在线免费观看| 国产日韩欧美在线观看| 久久久综合免费视频| 久久久久久九九九| 国产精品毛片a∨一区二区三区|国| 国产精品久久久亚洲| 欧美老女人性视频| 欧美精品电影免费在线观看| 亚洲free嫩bbb| 91av在线播放视频| 91精品国产乱码久久久久久久久| 亚洲欧美日韩区| 国产91对白在线播放| 亚洲一区二区中文字幕| 日韩有码在线视频| 成人午夜高潮视频| 精品国产一区二区三区久久狼黑人| 欧美午夜www高清视频| 欧美性极品xxxx娇小| 久久久久久69| 38少妇精品导航| 原创国产精品91| 美日韩在线视频| 97高清免费视频| 欧美三级免费观看| 国产精品久久色| 在线观看精品自拍私拍| 92看片淫黄大片看国产片| 日韩精品在线免费播放| 亚洲欧美日本伦理| 免费97视频在线精品国自产拍| 成人国内精品久久久久一区| 国内精品久久久久久中文字幕| 91精品国产综合久久久久久蜜臀| 久久艳片www.17c.com| 国产不卡一区二区在线播放| 亚洲人成网站在线播| 中文字幕亚洲综合久久筱田步美| 国产偷国产偷亚洲清高网站| 亚洲国产中文字幕在线观看| 日韩中文字幕免费| 欧美丝袜第一区| 狠狠干狠狠久久| 亚洲福利视频二区| 欧美亚洲国产日本| 欧美一级片免费在线| 国产欧美精品一区二区三区介绍| 国产亚洲精品久久| 日韩电视剧在线观看免费网站| 在线观看精品国产视频| 亚洲自拍小视频| 日本精品免费观看| 亚洲国产欧美一区二区三区同亚洲| 久久视频免费在线播放| 久久中文字幕在线| 美女av一区二区| 欧美自拍视频在线观看| 久久免费视频网站| 国产精品igao视频| 欧美亚洲在线观看| 亚洲国产精品999| 91av视频在线| 一本一本久久a久久精品牛牛影视| 6080yy精品一区二区三区| 亚洲国产另类 国产精品国产免费| 亚洲国产精品久久久久| 精品久久久久国产| 日韩小视频网址| 欧美在线www| 久久久久久久久久国产| 在线色欧美三级视频| 成人性生交大片免费观看嘿嘿视频| 久久久久久国产三级电影| 国产精品久久久久高潮| 欧美老肥婆性猛交视频| 国产69精品久久久久99| 国产亚洲欧美一区| 欧洲成人免费aa| 国产精品视频久| 亚洲精品美女在线观看| 亚洲高清免费观看高清完整版| 青草青草久热精品视频在线观看| 日韩国产欧美精品一区二区三区| 亚洲国模精品私拍|