最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

NodeJS實(shí)現(xiàn)一個聊天室功能

 更新時間:2019年11月25日 13:57:11   作者:何處錦繡不灰堆  
這篇文章主要介紹了NodeJS實(shí)現(xiàn)一個聊天室功能,本文實(shí)例截圖相結(jié)合給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

看效果

一直說我喜歡賣關(guān)子,這次直接看效果:

在這里插入圖片描述

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

在這里插入圖片描述

前文

先說一下為什么寫這個東西,最近不是在寫NodeJS知識點(diǎn)的梳理嘛,但是我發(fā)現(xiàn)梳理的過程著實(shí)無聊的要死,雖然已經(jīng)快梳理一半了,只是還沒發(fā)布,這個不重要,重要的是不做點(diǎn)什么東西確實(shí)無聊,所以今天把我做這個的過程記錄給你們看一下,喜歡的可以拿去玩玩。實(shí)現(xiàn)的功能是可以聊天,可以顯示用戶自定義的昵稱,并且顯示發(fā)送時間

PS:這個功能如果我們使用webstorm新建一個express app的項(xiàng)目的話,是可以省很多代碼的,但是這里我們選擇原生實(shí)現(xiàn)它,原因是我們寫代碼不可能一直依賴于別人搭建好的框架或者輪子,雖然我們提倡不重復(fù)造輪子,但是如果每一個程序員都這樣想的話,這個行業(yè)面臨的將是一個輪子都沒有。

客戶端代碼

<!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="昵稱" />
  <input type="text" id="send_info" value="" placeholder="請輸入您想說的話" />
  <button type="button" id="btn">發(fā)送</button>
</body>
<script>
  //創(chuàng)建一個io對象
  var socket = io();
  //用戶點(diǎn)擊發(fā)送的時候直接將昵稱和信息內(nèi)容發(fā)送過去,如果沒有昵稱,顯示匿名,判斷是不是有值
  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)容不可以為空`)
    }
  }
  // 收到的信息展示出來,新建一個元素,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 測試連接一個socket.io通信 廣播
 */
//引入fs
var fs = require('fs')
//引入http 
var http = require('http')
var date = new Date()
/**
 * @FormDate 格式化時間
 * @param {*} date 當(dāng)前時間
 */
function FormDate(date) {
  return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()} ${date.getHours()}:${date.getMinutes()}`
}
/**
 * 搭建一個服務(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') 第二步是一個新的變量.server 合成一步就是下面的代碼
var io = require('socket.io')(server);
io.on("connection", function (socket) {
  //這里獲取到對方的ip地址,可以展示,也可以不展示,也可以進(jìn)行ip的過濾
  var clientIp = socket.request.connection.remoteAddress
  console.info("一個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ù)跑起來

隱藏一下ip吧,為了安全

在這里插入圖片描述

當(dāng)然上面我用的一些可能比較‘原生',直接創(chuàng)建元素什么的,我是因?yàn)闆]有引入類似jquery這樣的框架進(jìn)來,引入的話就比較簡單的,但是不影響我們實(shí)現(xiàn)這個基礎(chǔ)的聊天功能,上面可能有一些你們不明白的地方或者是你們都明白,包括為什么上面啟動的時候不是node+文件名字而是nodemon+文件名,有什么區(qū)別,有什么好處,都沒關(guān)系,后面的文章我都會介紹上面用到的所有的知識點(diǎn),具體怎么使用的,怎么出來的, 為什么這么寫,怎么一步一步實(shí)現(xiàn)目前的這個效果,后面的文章我都會更新,為什么這個時候?qū)戇@個呢?原因是我想讓更多的人知道NodeJS本身是一個很好玩的語言,可以做的事情很多。如果你們看了我的文章以后喜歡上了NodeJS我的目的就達(dá)到了,畢竟我還是覺得NodeJS是一個非常強(qiáng)大的語言,我希望更多的人使用它。

如果有人覺得不想看那么多就想玩玩這個效果的,也可以,直接安裝node、然后本地初始化一個package.json,然后安裝nodemon、socket.io就可以了,具體怎么安裝,emmmmm

安裝node

下載node

下一步下一步就好了

初始化package.js

npm init

輸入名字 版本號之后 一直回車就好了

安裝nodemon

npm install -g nodemon --save-dev

安裝socket.io

npm install socket.io --save-dev

總結(jié)

以上所述是小編給大家介紹的NodeJS實(shí)現(xiàn)一個聊天室功能,點(diǎn)擊跳轉(zhuǎn)按鈕實(shí)現(xiàn)跳轉(zhuǎn),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • 一文教你學(xué)會Nodejs中puppeteer的簡單使用

    一文教你學(xué)會Nodejs中puppeteer的簡單使用

    Puppeteer是一個控制headless Chrome的Node.js API ,是一個 Node.js庫,在瀏覽器中手動完成的大多數(shù)事情都可以通過使用 Puppeteer完成,本文主要介紹了Puppeteer的簡單使用,希望對大家有所幫助
    2024-01-01
  • 一文搞懂npm?install?意義

    一文搞懂npm?install?意義

    我們在安裝依賴包的時候,不需要過多的去糾結(jié)是使用?-S?還是?-D?呢??隨便安裝到?dependencies?或者?devDependencies?里都行,反正?npm?install的時候,都會安裝dependencies?和?devDependencies依賴,今天通過本文學(xué)習(xí)npm?install意義,感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • Nginx設(shè)置為Node.js的前端服務(wù)器方法總結(jié)

    Nginx設(shè)置為Node.js的前端服務(wù)器方法總結(jié)

    在本篇文章中小編給大家分享了關(guān)于Nginx設(shè)置為Node.js的前端服務(wù)器的方法和實(shí)例,需要的朋友們學(xué)習(xí)下。
    2019-03-03
  • Nodejs Express4.x開發(fā)框架隨手筆記

    Nodejs Express4.x開發(fā)框架隨手筆記

    Express: ?web application framework for?Node.js?Express 是一個簡潔、靈活的 node.js Web 應(yīng)用開發(fā)框架, 它提供一系列強(qiáng)大的特性,幫助你創(chuàng)建各種 Web 和移動設(shè)備應(yīng)用,本篇文章給大家介紹nodejs express4.x開發(fā)框架隨手筆記,感興趣的朋友一起學(xué)習(xí)吧
    2015-11-11
  • 深入理解 Koa 框架中間件原理

    深入理解 Koa 框架中間件原理

    koa是目前node里最流行的web框架。這篇文章主要介紹了理解 Koa 框架中間件原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • Cli Todo命令行todo工具使用演示

    Cli Todo命令行todo工具使用演示

    這篇文章主要為大家介紹了Cli Todo命令行todo工具使用演示示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Node 升級到最新穩(wěn)定版的方法分享

    Node 升級到最新穩(wěn)定版的方法分享

    今天小編就為大家分享一篇Node 升級到最新穩(wěn)定版的方法分享,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Nodejs中執(zhí)行的shell命令的代碼分享

    Nodejs中執(zhí)行的shell命令的代碼分享

    雖然nodejs運(yùn)行時提供了和OS交互的諸多API命令,但是有些操作(例如:特定系統(tǒng)信息獲?。┻€是使用shell命令更加方便一些,下面就跟隨小編一起來看看有哪些是宜在nodejs中執(zhí)行的shell代碼吧
    2024-02-02
  • Nodejs實(shí)現(xiàn)多人同時在線移動鼠標(biāo)的小游戲分享

    Nodejs實(shí)現(xiàn)多人同時在線移動鼠標(biāo)的小游戲分享

    這篇文章主要介紹了Nodejs實(shí)現(xiàn)多人同時在線移動鼠標(biāo)的小游戲分享,本文給出了服務(wù)器端和客戶端代碼以及運(yùn)行方法,需要的朋友可以參考下
    2014-12-12
  • nodejs對mongodb數(shù)據(jù)庫的增加修刪該查實(shí)例代碼

    nodejs對mongodb數(shù)據(jù)庫的增加修刪該查實(shí)例代碼

    在本篇文章里小編給大家整理的是一篇關(guān)于nodejs對mongodb數(shù)據(jù)庫的增加修刪該查實(shí)例代碼,有需要的朋友們可以參考下。
    2020-01-01

最新評論

疏附县| 永吉县| 三门县| 集安市| 河曲县| 读书| 雷山县| 宁阳县| 驻马店市| 高要市| 奉化市| 红原县| 巴楚县| 嘉定区| 凤山县| 特克斯县| 读书| 依兰县| 封开县| 神木县| 武鸣县| 马龙县| 台安县| 兰溪市| 陈巴尔虎旗| 汝州市| 金秀| 高清| 班戈县| 水城县| 忻城县| 吉安市| 邢台县| 昆明市| 柞水县| 安庆市| 呼图壁县| 岚皋县| 丹江口市| 望城县| 屏东县|