DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> WebSocket+node.js創建即時通信的Web聊天服務器
WebSocket+node.js創建即時通信的Web聊天服務器
編輯:關於JavaScript     

本文實例node.js創建即時通信的Web聊天服務器,供大家參考,具體內容如下

1.使用nodejs-websocket
 nodejs-websocket是基於node.js編寫的一個後端實現websocket協議的庫,
 連接:https://github.com/sitegui/nodejs-websocket。
 (1)安裝
 在項目目錄下通過npm安裝:npm install nodejs-websocket
 (2)創建服務器

 //引入nodejs-websocket
var ws = require(“nodejs-websocket”);
//調用createServer方法創建服務器,回調函數中的conn是connection的實例
var server = ws.create(function(conn){
  console.log(“New connection”);
  //監聽text事件,text事件每當從服務器收到文本類型數據時觸發,回調函數的參數為傳過來的字符串
  conn.on(“text”, function(str){
 console.log(“Received ” + str);
  });
  //監聽close事件,每次斷開連接時觸發
  conn.on(“close”, function(code, reason){
 console.log(“Connection closed”);
  })
}).listen(8888);

 2.客戶端使用websocket
 在客戶端首先需要實例化一個websocket對象:ws = new WebSocket("ws://localhost:5000");其中的參數傳入格式為ws://+url,這就和http協議前綴http://一樣。接下來就可以通過websocket內置的一些方法進行事件監聽和數據展示。
 這裡統一介紹各個監聽事件:onopen當服務器和客戶端建立起連接時觸發;onmessage當客戶端收到服務器發送的數據時觸發; onclose當客戶端和服務器的連接關閉時觸發;onerror當連接出現錯誤時觸發。

3.使用websocket+nodejs實現在線聊天室
 (1)html和css代碼省略
 (2)客戶端js:    

oConnect.onclick=function(){
    ws=new WebSocket('ws://localhost:5000');
     ws.onopen=function(){
       oUl.innerHTML+="<li>客戶端已連接</li>";
     }
    ws.onmessage=function(evt){
      oUl.innerHTML+="<li>"+evt.data+"</li>";
    }
    ws.onclose=function(){
      oUl.innerHTML+="<li>客戶端已斷開連接</li>";
    };
    ws.onerror=function(evt){
      oUl.innerHTML+="<li>"+evt.data+"</li>";
 
    };
  };
  oSend.onclick=function(){
    if(ws){
      ws.send(oInput.value);
    }
  }(3)服務器端js:
 /*
websocket支持兩種類型的數據傳輸:text類型和binary類型,其中二進制數據是通過流的模式發送和讀取的
*/
var app=require('http').createServer(handler); //為了簡化代碼,將服務器創建具體代碼放到handler函數中
var ws=require('nodejs-websocket');
var fs=require('fs');
app.listen(8888);
function handler(req,res){
  //__dirname返回該文件所在的當前目錄。調用readFile方法進行文件讀取
  fs.readFile(__dirname+'/index.html',function(err,data){
    if(err){
      res.writeHead(500);
      return res.end('error ');
    }
    res.writeHead(200);
    res.end(data);
  });
}
//以上步驟成功在8888端口渲染出相應的html界面
//conn是對應的connection的實例
var server = ws.createServer(function(conn){
  console.log('new conneciton');
  //監聽text事件,每當收到文本時觸發
  conn.on("text",function(str){
    broadcast(server,str);
  });
  //當任何一端關閉連接時觸發,這裡就是在控制台輸出connection closed
  conn.on("close",function(code,reason){
    console.log('connection closed');
  })
}).listen(5000);
//注意這裡的listen監聽是剛才開通的那個服務器的端口,客戶端將消息發送到這裡處理
 
function broadcast(server, msg) {
  //server.connections是一個數組,包含所有連接進來的客戶端
  server.connections.forEach(function (conn) {
    //connection.sendText方法可以發送指定的內容到客戶端,傳入一個字符串
    //這裡為遍歷每一個客戶端為其發送內容
    conn.sendText(msg);
  })
}

以上就是本文

的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved