nodejs実現した簡単なチャットルーム機能共有

7538 ワード

今日は簡単なチャットルームを実現します.バックグラウンドはnodejsで、クライアントとサービス端末の通信用sockete.ioで、これは比較的成熟したwebsocketのフレームです.
初期動作
1.expressをインストールして、これを使ってsocket.ioを管理して、および静的なページ、命令npm install express--save、--saveはパケットをpackge.jsonファイルに追加することができます.2.socket.ioをインストールして、npm install sockete.ioを命令します.
サービスコードを作成する
まず私達は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
');
    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\sockett.ioode_modules\sockett.io-client\dist、ここに開発版と圧縮版があります.標準は開発版を引用すればいいです.
フロントエンドは主に入力ニックネームチェック、メッセージ処理、完全コードは以下の通りです.
 
  



    socket.io