首頁 > web前端 > js教程 > 主體

nodejs實作的一個簡單聊天室功能分享_node.js

WBOY
發布: 2016-05-16 16:28:46
原創
1440 人瀏覽過

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

初始工作

1.安裝express, 用這個來託管socket.io,以及靜態頁面,命令npm install express --save,--save可以使套件添加到package.json檔案裡.
2.安裝s​​ocket.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('     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_modulessocket.ionode_modulessocket.io-clientdist,這裡有開發版和壓縮版的,預設引用開發版就行.

前端主要處理輸入暱稱檢查,訊息處理,完整程式碼如下:

複製程式碼 程式碼如下:




    socket.io 聊天室例子
   
   
   
   


   

        

            

                

        

        

            
            
            
        

   

   
   
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!