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

玩轉(zhuǎn)NODE.JS(四)-搭建簡(jiǎn)單的聊天室的代碼

 更新時(shí)間:2016年11月11日 14:03:02   作者:尛魚  
本篇文章主要介紹了利用NODE.JS搭建簡(jiǎn)單的聊天室的代碼,有需要的可以了解一下。

Nodejs好久沒(méi)有跟進(jìn)了,最近想用它搞一個(gè)聊天室,然后便偶遇了socket.io這個(gè)東東,說(shuō)是可以用它來(lái)簡(jiǎn)單的實(shí)現(xiàn)實(shí)時(shí)雙向的基于事件的通訊機(jī)制。我便看了一些個(gè)教程使用它來(lái)搭建一個(gè)超級(jí)簡(jiǎn)單的聊天室。

初始化項(xiàng)目

在電腦里新建一個(gè)文件夾,叫做“chatroom”,然后使用npm進(jìn)行初始化:

$ npm init

然后根據(jù)提示以及相關(guān)信息一步一步輸入,當(dāng)然也可以一路回車下去,之后會(huì)在項(xiàng)目里生成一個(gè)package.json文件,里面的信息如下:

$ cat package.json
{
 "name": "chatroom",
 "version": "1.0.0",
 "description": "a room which lets people chat",
 "main": "index.js",
 "scripts": {
  "test": "nothing"
 },
 "author": "voidy",
 "license": "ISC",
 }

這個(gè)文件描述了項(xiàng)目的相關(guān)信息。

安裝socket.io

接下來(lái),安裝socket.io:

 $ npm install socket.io --save

安裝Socket.IO的時(shí)候,--save參數(shù)用于保存模塊依賴信息到package.json文件,安裝完后,打開package.json文件會(huì)看到里面多了一項(xiàng)內(nèi)容:

 "dependencies": {
   "socket.io": "^1.2.1"
 }

同時(shí)Socket.IO安裝在了node_modules文件夾下。

實(shí)現(xiàn)聊天-服務(wù)器端

首先我們來(lái)編寫服務(wù)器端程序,新建文件“index.js”,在里面導(dǎo)入如下模塊:

 var http = require('http');      
 var socketio = require('socket.io'); 
 var fs = require('fs'); 

第一行是導(dǎo)入http模塊,先前我們已經(jīng)見過(guò)了,用于創(chuàng)建http server。

第二行是導(dǎo)入socket.io模塊,實(shí)現(xiàn)實(shí)時(shí)聊天必備的,不再贅述。

第三行是導(dǎo)入fs模塊,用于讀取文件。具體的一會(huì)你就會(huì)了解到。

通過(guò)http模塊創(chuàng)建app,在剛剛的代碼中加入如下語(yǔ)句:

var app = http.createServer(function(req, res) {
 
  fs.readFile(__dirname + '/index.html', function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }
    res.writeHead(200); 
    res.write(data);  
    res.end();
  });
}).listen(8888);

fs.readFile()方法用于讀取文件,在這里讀取的是index.html文件,也就是一會(huì)即將要編寫的前端聊天室的展示頁(yè)面。

第8行是返回請(qǐng)求的狀態(tài)碼,第9行是返回讀取到的內(nèi)容給瀏覽器。然后這個(gè)http server使用listen方法監(jiān)聽8888端口。

接下來(lái),就是使用socket.io來(lái)實(shí)現(xiàn)聊天的事件了。在剛剛的index.js文件的http server下面接著創(chuàng)建socket.io對(duì)象。

var io = socketio(app);

然后監(jiān)聽connection事件,當(dāng)瀏覽器連接到此Socket.IO服務(wù)時(shí)觸發(fā)該事件:

io.on('connection', function (socket) {
  // 監(jiān)聽瀏覽器端的chat事件
  socket.on('chat', function (data) {
    console.log(data);
    io.emit('sendmsg', data); 
  });
});

第4行用于將信息輸入到后臺(tái)的顯示器,第5行用于將內(nèi)容發(fā)送給客戶端,為了知道服務(wù)器是否啟動(dòng),我在后面又加了如下一句:

console.log("Server is running at http://localhost:8888")

至此,服務(wù)器端編碼完成。

實(shí)現(xiàn)聊天-客戶端

首先實(shí)現(xiàn)界面部分,僅僅有顯示消息記錄以及消息發(fā)送框,代碼如下:

<html>
  <head>
    <meta charset="utf-8">
    <title>Socket.IO chat</title>
    <style>
      * { margin: 0; padding: 0; box-sizing: border-box; }
      body { font: 13px Helvetica, Arial; }
      #form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
      #form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
      #form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
      #messages { list-style-type: none; margin: 0; padding: 0; }
      #messages li { padding: 5px 10px; }
      #messages li:nth-child(odd) { background: #eee; }
    </style>
    <!-- 引入socket.io庫(kù)和jQuery庫(kù) -->
    <script src="https://cdn.socket.io/socket.io-1.2.1.js"></script>
    <script src="http://code.jquery.com/jquery-1.11.1.js"></script>
  </head>
  <body>
    <!-- 顯示消息記錄 -->
    <ul id="messages"></ul>

    <!-- 消息發(fā)送框 -->
    <div id="form">
      <input id="m" autocomplete="off" /><button id="send">Send</button>
    </div>
  </body>
</html>

然后需要在里面加上JS來(lái)實(shí)現(xiàn)與服務(wù)器端的通信,將服務(wù)器端獲取的數(shù)據(jù)展示到客戶端,主要代碼如下:

<script>
// 連接到Socket.IO服務(wù)器
var socket = io.connect();

$(function() {
 // 綁定發(fā)按鈕發(fā)送消息的事件
  $('#send').on('click', function() {
    var data = $('#m').val();
   // 創(chuàng)建chat事件并發(fā)送消息給服務(wù)器
    // emit('event') 表示發(fā)送了一個(gè)event命令
    // 使用io.on('event')接收對(duì)應(yīng)事件的信息
    // 所以客戶端服務(wù)器端需要使用socket.on('chat')接收聊天信息
    socket.emit('chat', { msg: data });
    $('#m').val('');
  });
});

$(function() {
  // 接收消息并顯示到消息記錄框中
  socket.on('sendmsg', function(msg) {
    $('#messages').append($('<li>').text(msg.msg));
  });
});
</script>

此時(shí),可以執(zhí)行:

$ node index.js

然后在瀏覽器打開localhost:8888查看效果。

至此,一個(gè)簡(jiǎn)陋的聊天室就實(shí)現(xiàn)了,有興趣的朋友可以在此基礎(chǔ)上進(jìn)行擴(kuò)展,實(shí)現(xiàn)功能更為復(fù)雜的聊天室。

項(xiàng)目源代碼:源碼下載

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Node.js基礎(chǔ)入門之緩存區(qū)與文件操作詳解

    Node.js基礎(chǔ)入門之緩存區(qū)與文件操作詳解

    Node.js是一個(gè)基于Chrome?V8引擎的JavaScript運(yùn)行時(shí)。類似于Java中的JRE,.Net中的CLR。本文將詳細(xì)為大家介紹Node.js中的緩存區(qū)與文件操作,感興趣的可以了解一下
    2022-03-03
  • 在Mac OS上安裝使用Node.js的項(xiàng)目自動(dòng)化構(gòu)建工具Gulp

    在Mac OS上安裝使用Node.js的項(xiàng)目自動(dòng)化構(gòu)建工具Gulp

    Gulp是一個(gè)在使用上比Grunt更加簡(jiǎn)潔的自動(dòng)化工具(文中附有對(duì)比),和Node的npm包管理器配合使用非常方便,下面就記錄一下在Mac OS上安裝使用Node.js的項(xiàng)目自動(dòng)化構(gòu)建工具Gulp的方法:
    2016-06-06
  • 詳解Node.js利用node-git-server快速搭建git服務(wù)器

    詳解Node.js利用node-git-server快速搭建git服務(wù)器

    本篇文章主要介紹了詳解Node.js利用node-git-server快速搭建git服務(wù)器,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-09-09
  • 淺析node.js中close事件

    淺析node.js中close事件

    本文簡(jiǎn)單介紹了http.ServerRespose對(duì)象的close事件,并給出了相關(guān)實(shí)例,推薦給需要的小伙伴參考下吧。
    2014-11-11
  • nodejs用gulp管理前端文件方法

    nodejs用gulp管理前端文件方法

    本篇文章給大家分享了nodejs用gulp管理前端文件的步驟方法以及優(yōu)缺點(diǎn)分析,有興趣的朋友參考下。
    2018-06-06
  • node實(shí)現(xiàn)分片下載的示例代碼

    node實(shí)現(xiàn)分片下載的示例代碼

    這篇文章主要介紹了node實(shí)現(xiàn)分片下載的示例代碼,使用場(chǎng)景包括基于瀏覽器的流文件片段傳輸、基于客戶端的分片下載等。感興趣的小伙伴們可以參考一下
    2018-10-10
  • 基于Express和Multer實(shí)現(xiàn)文件本地服務(wù)器文件上傳功能

    基于Express和Multer實(shí)現(xiàn)文件本地服務(wù)器文件上傳功能

    在現(xiàn)代應(yīng)用程序中,文件上傳功能成為了用戶共享和存儲(chǔ)數(shù)據(jù)的重要途徑,所以本文我們一起來(lái)探討文件上傳中間件的重要性,并提供常見的實(shí)現(xiàn)方法和相應(yīng)的代碼吧
    2023-06-06
  • Node.js插件安裝圖文教程

    Node.js插件安裝圖文教程

    Node.js是一個(gè)基于Chrome JavaScript運(yùn)行時(shí)建立的平臺(tái), 用于方便地搭建響應(yīng)速度快、易于擴(kuò)展的網(wǎng)絡(luò)應(yīng)用。本文給大家介紹Node.js插件安裝的教程,非常實(shí)用,特此分享給大家,需要的朋友一起學(xué)習(xí)吧
    2016-05-05
  • 淺析node應(yīng)用的timing-attack安全漏洞

    淺析node應(yīng)用的timing-attack安全漏洞

    本篇文章給大家通過(guò)原理的原因分析了node應(yīng)用的timing-attack安全漏洞問(wèn)題,有興趣的朋友閱讀參考下。
    2018-02-02
  • Node.js中MongoDB插入數(shù)據(jù)的實(shí)現(xiàn)方法

    Node.js中MongoDB插入數(shù)據(jù)的實(shí)現(xiàn)方法

    在Node.js中,可以使用MongoDB原生驅(qū)動(dòng)或Mongoose庫(kù)來(lái)連接和操作MongoDB數(shù)據(jù)庫(kù),本文就來(lái)介紹一下Node.js中MongoDB插入數(shù)據(jù)的實(shí)現(xiàn)方法,感興趣的可以了解一下
    2023-12-12

最新評(píng)論

仙桃市| 泰和县| 营口市| 秦皇岛市| 延安市| 木里| 化隆| 洛阳市| 塔河县| 定安县| 镇原县| 汉川市| 建宁县| 铜梁县| 南木林县| 平和县| 周宁县| 尼木县| 淮北市| 浦北县| 洛阳市| 大英县| 盱眙县| 桃园市| 沙田区| 河南省| 郸城县| 黄骅市| 习水县| 应城市| 白朗县| 循化| 威信县| 都昌县| 宜宾市| 安泽县| 高青县| 太康县| 洛川县| 平山县| 搜索|