WebSocket+node.js建立即時通訊的Web聊天伺服器,websocketnode.js

來源:互聯網
上載者:User

WebSocket+node.js建立即時通訊的Web聊天伺服器,websocketnode.js

本文執行個體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-websocketvar 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);  })}以上就是本文

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.