国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

WebSocket+node.js創建即時通信的Web聊天服務器

2019-11-20 09:17:14
字體:
來源:轉載
供稿:網友

本文實例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);  })}以上就是本文

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁海县| 蒲江县| 山阴县| 桃园市| 临邑县| 马尔康县| 凤城市| 姜堰市| 依兰县| 福贡县| 建瓯市| 汶上县| 东兴市| 大新县| 石狮市| 方城县| 扎赉特旗| 新民市| 井陉县| 理塘县| 资兴市| 阳谷县| 潼关县| 兴安县| 德令哈市| 海丰县| 富民县| 山西省| 台山市| 曲靖市| 巴南区| 兰州市| 武山县| 咸宁市| 恩施市| 井陉县| 南安市| 新化县| 沙洋县| 特克斯县| 赤水市|