NodeJS實(shí)現(xiàn)一個(gè)聊天室功能
看效果
一直說(shuō)我喜歡賣(mài)關(guān)子,這次直接看效果:

聊天界面(喜歡的可以自己畫(huà)一個(gè)比較逼真的頁(yè)面)

前文
先說(shuō)一下為什么寫(xiě)這個(gè)東西,最近不是在寫(xiě)NodeJS知識(shí)點(diǎn)的梳理嘛,但是我發(fā)現(xiàn)梳理的過(guò)程著實(shí)無(wú)聊的要死,雖然已經(jīng)快梳理一半了,只是還沒(méi)發(fā)布,這個(gè)不重要,重要的是不做點(diǎn)什么東西確實(shí)無(wú)聊,所以今天把我做這個(gè)的過(guò)程記錄給你們看一下,喜歡的可以拿去玩玩。實(shí)現(xiàn)的功能是可以聊天,可以顯示用戶(hù)自定義的昵稱(chēng),并且顯示發(fā)送時(shí)間
PS:這個(gè)功能如果我們使用webstorm新建一個(gè)express app的項(xiàng)目的話(huà),是可以省很多代碼的,但是這里我們選擇原生實(shí)現(xiàn)它,原因是我們寫(xiě)代碼不可能一直依賴(lài)于別人搭建好的框架或者輪子,雖然我們提倡不重復(fù)造輪子,但是如果每一個(gè)程序員都這樣想的話(huà),這個(gè)行業(yè)面臨的將是一個(gè)輪子都沒(méi)有。
客戶(hù)端代碼
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>http_demo</title>
<script src="/socket.io/socket.io.js"></script>
</head>
<body>
<h1>
WelCome to CSDN of clearlove
</h1>
<p>
If you like my article, you can follow my blog
</p>
<p>公屏聊天</p>
<div id="infos">
</div>
<input style="margin-top: 5vh;
width: 100px;
height: 40px;
border: 1px solid #ffffff;
border-radius: 4px;
color: #000000;
padding-left: 10px" type="text" id="nick" value="" placeholder="昵稱(chēng)" />
<input type="text" id="send_info" value="" placeholder="請(qǐng)輸入您想說(shuō)的話(huà)" />
<button type="button" id="btn">發(fā)送</button>
</body>
<script>
//創(chuàng)建一個(gè)io對(duì)象
var socket = io();
//用戶(hù)點(diǎn)擊發(fā)送的時(shí)候直接將昵稱(chēng)和信息內(nèi)容發(fā)送過(guò)去,如果沒(méi)有昵稱(chēng),顯示匿名,判斷是不是有值
document.getElementById("btn").onclick = function () {
if(document.getElementById("send_info").value){
socket.emit("link_to_server", document.getElementById("send_info").value, document.getElementById("nick").value ? document.getElementById("nick").value : '匿名')
}else{
alert(`發(fā)送內(nèi)容不可以為空`)
}
}
// 收到的信息展示出來(lái),新建一個(gè)元素,append到div中
socket.on('link_to_client', function (msg) {
var h6 = document.createElement('h6');
h6.innerText = `${msg}`;
document.getElementById('infos').append(h6)
})
</script>
<style>
body {
background: #307ac6;
text-align: center;
color: aliceblue;
margin: 0% 10%
}
p {
font-size: 2rem
}
input {
margin-top: 5vh;
width: 200px;
height: 40px;
border: 1px solid #ffffff;
border-radius: 4px;
color: #000000;
padding-left: 10px;
}
button {
border: none;
background: #ffffff;
border-radius: 4px;
width: 90px;
height: 42px;
color: #000000;
}
#infos {
margin-left: 25vw;
width: 400px;
height: 500px;
overflow: scroll;
border: none;
background: #ffffff;
color: #000000;
}
</style>
</html>
服務(wù)端代碼
/**
* @author clearlove
* @aim 測(cè)試連接一個(gè)socket.io通信 廣播
*/
//引入fs
var fs = require('fs')
//引入http
var http = require('http')
var date = new Date()
/**
* @FormDate 格式化時(shí)間
* @param {*} date 當(dāng)前時(shí)間
*/
function FormDate(date) {
return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()} ${date.getHours()}:${date.getMinutes()}`
}
/**
* 搭建一個(gè)服務(wù)器
*/
var server = http.createServer(function (res, res) {
if (res.url !== '/favicon.ico') {
res.writeHead(200, { "Content-type": "text/html" })
const myreadstream = fs.createReadStream(__dirname + '/views/http_demo.html', 'utf-8')
myreadstream.pipe(res)
}
})
//引入socket.io 這里是兩步,第一步是io = require('socket.io') 第二步是一個(gè)新的變量.server 合成一步就是下面的代碼
var io = require('socket.io')(server);
io.on("connection", function (socket) {
//這里獲取到對(duì)方的ip地址,可以展示,也可以不展示,也可以進(jìn)行ip的過(guò)濾
var clientIp = socket.request.connection.remoteAddress
console.info("一個(gè)socket連接成功了")
socket.on("link_to_server", function (msg, nick) {
//這里使用io發(fā)送
io.emit('link_to_client', `${nick} : ${msg} ${FormDate(date)}`)
})
})
server.listen(5000, '0.0.0.0');
console.info("server is running...")
服務(wù)跑起來(lái)
隱藏一下ip吧,為了安全

當(dāng)然上面我用的一些可能比較‘原生',直接創(chuàng)建元素什么的,我是因?yàn)闆](méi)有引入類(lèi)似jquery這樣的框架進(jìn)來(lái),引入的話(huà)就比較簡(jiǎn)單的,但是不影響我們實(shí)現(xiàn)這個(gè)基礎(chǔ)的聊天功能,上面可能有一些你們不明白的地方或者是你們都明白,包括為什么上面啟動(dòng)的時(shí)候不是node+文件名字而是nodemon+文件名,有什么區(qū)別,有什么好處,都沒(méi)關(guān)系,后面的文章我都會(huì)介紹上面用到的所有的知識(shí)點(diǎn),具體怎么使用的,怎么出來(lái)的, 為什么這么寫(xiě),怎么一步一步實(shí)現(xiàn)目前的這個(gè)效果,后面的文章我都會(huì)更新,為什么這個(gè)時(shí)候?qū)戇@個(gè)呢?原因是我想讓更多的人知道NodeJS本身是一個(gè)很好玩的語(yǔ)言,可以做的事情很多。如果你們看了我的文章以后喜歡上了NodeJS我的目的就達(dá)到了,畢竟我還是覺(jué)得NodeJS是一個(gè)非常強(qiáng)大的語(yǔ)言,我希望更多的人使用它。
如果有人覺(jué)得不想看那么多就想玩玩這個(gè)效果的,也可以,直接安裝node、然后本地初始化一個(gè)package.json,然后安裝nodemon、socket.io就可以了,具體怎么安裝,emmmmm
安裝node
下載node
下一步下一步就好了
初始化package.js
npm init
輸入名字 版本號(hào)之后 一直回車(chē)就好了
安裝nodemon
npm install -g nodemon --save-dev
安裝socket.io
npm install socket.io --save-dev
總結(jié)
以上所述是小編給大家介紹的NodeJS實(shí)現(xiàn)一個(gè)聊天室功能,點(diǎn)擊跳轉(zhuǎn)按鈕實(shí)現(xiàn)跳轉(zhuǎn),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
- nodejs實(shí)現(xiàn)的一個(gè)簡(jiǎn)單聊天室功能分享
- 使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
- js編寫(xiě)簡(jiǎn)單的聊天室功能
- AngularJS+Node.js實(shí)現(xiàn)在線(xiàn)聊天室
- Ajax PHP JavaScript MySQL實(shí)現(xiàn)簡(jiǎn)易無(wú)刷新在線(xiàn)聊天室
- javascript實(shí)現(xiàn)簡(jiǎn)易聊天室
- JavaScript仿聊天室聊天記錄
- Nodejs實(shí)現(xiàn)多房間簡(jiǎn)易聊天室功能
- Node.js中使用socket創(chuàng)建私聊和公聊聊天室
- JavaScript實(shí)現(xiàn)QQ聊天室功能
相關(guān)文章
詳解如何優(yōu)雅在webpack項(xiàng)目實(shí)現(xiàn)mock服務(wù)器
這篇文章主要為大家介紹了詳解如何優(yōu)雅在webpack項(xiàng)目實(shí)現(xiàn)mock服務(wù)器,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
詳解nodejs中exports和module.exports的區(qū)別
本文主要介紹了exports 和 module.exports 的區(qū)別。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02
淺談Express.js解析Post數(shù)據(jù)類(lèi)型的正確姿勢(shì)
這篇文章主要介紹了Express.js解析Post數(shù)據(jù)類(lèi)型的正確姿勢(shì),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05
autojs的nodejs打包成品app經(jīng)驗(yàn)分享
這篇文章主要為大家介紹了autojs的nodejs打包成品app經(jīng)驗(yàn)分享,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01

