node.js如何創(chuàng)建簡(jiǎn)單聊天室

這篇文章主要介紹node.js如何創(chuàng)建簡(jiǎn)單聊天室,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

成都創(chuàng)新互聯(lián)公司專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、明溪網(wǎng)絡(luò)推廣、小程序制作、明溪網(wǎng)絡(luò)營(yíng)銷(xiāo)、明溪企業(yè)策劃、明溪品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供明溪建站搭建服務(wù),24小時(shí)服務(wù)熱線(xiàn):028-86922220,官方網(wǎng)址:muchs.cn

基于node.js和websocket實(shí)現(xiàn)一個(gè)簡(jiǎn)單的在線(xiàn)聊天室系統(tǒng)(聊天群)。

在B/S架構(gòu)中,我們要得到一個(gè)數(shù)據(jù),要向服務(wù)器請(qǐng)求,然后服務(wù)器響應(yīng)。那么如果我們客戶(hù)端不發(fā)送請(qǐng)求,服務(wù)器會(huì)不會(huì)主動(dòng)給我們的客戶(hù)端(瀏覽器)發(fā)東西呢?

答案是不會(huì)的,客戶(hù)端和服務(wù)器通過(guò)TCP/IP協(xié)議進(jìn)行連接,然后通過(guò)HTTP協(xié)議進(jìn)行請(qǐng)求連接。而HTTP協(xié)議是一個(gè)請(qǐng)求—響應(yīng)式的協(xié)議,而且它是一個(gè)無(wú)狀態(tài)的協(xié)議,即每一次請(qǐng)求—響應(yīng)之間是沒(méi)有關(guān)系的。

而我們的聊天室需要什么呢?

1.發(fā)送消息      2.接收消息

在接收消息中:一個(gè)客戶(hù)端給服務(wù)器發(fā)送消息,服務(wù)器接收消息,然后主動(dòng)發(fā)給另一個(gè)客戶(hù)端。

所以HTTP滿(mǎn)足不了我們的要求。這里我們就要用到socket協(xié)議。當(dāng)服務(wù)器與客戶(hù)端連接后,兩者都會(huì)時(shí)刻做著收發(fā)消息的準(zhǔn)備。

首先在npm中下載socket.io模塊(之前要安裝了node.js才行)。打開(kāi)cmd。

node.js如何創(chuàng)建簡(jiǎn)單聊天室

(我創(chuàng)建了一個(gè)node.js chat文件夾,文件都放在這里面)

然后開(kāi)始寫(xiě)我們的服務(wù)器代碼,創(chuàng)建文件server.js。

//server.js

var http = require('http');
var fs = require('fs');
var ws = require('socket.io'); //引入socket.io

var server = http.createServer(function (req, res) {
    var html = fs.readFileSync('./client.html'); 
   //client.html是發(fā)送給客戶(hù)端的文件(客戶(hù)端界面)

    res.end(html);
}).listen(8000);

var io = ws(server); //http服務(wù)與ws服務(wù)相關(guān)聯(lián), 返回io服務(wù)實(shí)例

//監(jiān)聽(tīng)用戶(hù)的連接事件
io.on('connection',function (socket) {      
    //發(fā)生在用戶(hù)連接io服務(wù)器時(shí)
    console.log('有新用戶(hù)進(jìn)入房間');

    //消息發(fā)送事件
    socket.on('message',function (obj) {
       console.log(obj);
       io.emit('message',obj); //發(fā)送消息給所有客戶(hù)端(廣播)
    });
});

然后開(kāi)始寫(xiě)客戶(hù)端。

因?yàn)槲覀兎?wù)器用的是socket.io,所以在客戶(hù)端中應(yīng)該使用socket.io相對(duì)應(yīng)的服務(wù)。此處我直接引入了一個(gè)js文件。

創(chuàng)建文件client.html。

//client.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Node.js+webSocket聊天室</title>
</head>
<body>
<h2>liky聊天室</h2>
<textarea name="" id="text" ></textarea>
<button id="btn">發(fā)送</button>

<script src="http://wulv5.com/js/socket.io.min.js"></script>
<script>
    var socket = io.connect("/"); //連接聊天室的io服務(wù)器 io服務(wù)器的根地址

    var oText = document.getElementById("text");
    var oBtn = document.getElementById("btn");

    var myMessage = "";

    oBtn.onclick = function () {
        var mes = oText.value;

        //當(dāng)消息為空時(shí)
        if(!mes){
            return;
        }
        myMessage = mes;
        socket.send(mes); //發(fā)送消息到服務(wù)器
        oText.value = ""; //清空文本框
    }

    //當(dāng)服務(wù)器廣播消息時(shí),觸發(fā)message事件,消息內(nèi)容在回調(diào)函數(shù)中
    socket.on('message',function (mm) {
        var p = document.createElement('p');
        p.innerText = mm;
        if(myMessage === mm){
            p.style.cssText = "color:red;margin-left:10%";
        }
        document.body.appendChild(p);
    })

</script>
</body>
</html>

到此,代碼部分就完成了。接下來(lái)打開(kāi)cmd,運(yùn)行我們的文件。

node.js如何創(chuàng)建簡(jiǎn)單聊天室

現(xiàn)在就可以打開(kāi)瀏覽器看一下效果啦。打開(kāi)瀏覽器,訪問(wèn)地址http://localhost:8000/。多打開(kāi)幾個(gè)頁(yè)面來(lái)試試效果。

node.js如何創(chuàng)建簡(jiǎn)單聊天室

這樣,一個(gè)簡(jiǎn)單的本地聊天室就完成啦??梢詡鞯椒?wù)器上,就可以和別人一起聊天啦(這個(gè)有空我再寫(xiě)一下)。

以上是“node.js如何創(chuàng)建簡(jiǎn)單聊天室”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)站標(biāo)題:node.js如何創(chuàng)建簡(jiǎn)單聊天室
轉(zhuǎn)載源于:http://muchs.cn/article24/jpejce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、小程序開(kāi)發(fā)、商城網(wǎng)站靜態(tài)網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)