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

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 18:58:58
字體:
來源:轉載
供稿:網友

Nodejs好久沒有跟進了,最近想用它搞一個聊天室,然后便偶遇了socket.io這個東東,說是可以用它來簡單的實現實時雙向的基于事件的通訊機制。我便看了一些個教程使用它來搭建一個超級簡單的聊天室。

初始化項目

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

$ npm init

然后根據提示以及相關信息一步一步輸入,當然也可以一路回車下去,之后會在項目里生成一個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", }

這個文件描述了項目的相關信息。

安裝socket.io

接下來,安裝socket.io:

 $ npm install socket.io --save

安裝Socket.IO的時候,--save參數用于保存模塊依賴信息到package.json文件,安裝完后,打開package.json文件會看到里面多了一項內容:

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

同時Socket.IO安裝在了node_modules文件夾下。

實現聊天-服務器端

首先我們來編寫服務器端程序,新建文件“index.js”,在里面導入如下模塊:

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

第一行是導入http模塊,先前我們已經見過了,用于創建http server。

第二行是導入socket.io模塊,實現實時聊天必備的,不再贅述。

第三行是導入fs模塊,用于讀取文件。具體的一會你就會了解到。

通過http模塊創建app,在剛剛的代碼中加入如下語句:

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文件,也就是一會即將要編寫的前端聊天室的展示頁面。

第8行是返回請求的狀態碼,第9行是返回讀取到的內容給瀏覽器。然后這個http server使用listen方法監聽8888端口。

接下來,就是使用socket.io來實現聊天的事件了。在剛剛的index.js文件的http server下面接著創建socket.io對象。

var io = socketio(app);

然后監聽connection事件,當瀏覽器連接到此Socket.IO服務時觸發該事件:

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

第4行用于將信息輸入到后臺的顯示器,第5行用于將內容發送給客戶端,為了知道服務器是否啟動,我在后面又加了如下一句:

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

至此,服務器端編碼完成。

實現聊天-客戶端

首先實現界面部分,僅僅有顯示消息記錄以及消息發送框,代碼如下:

<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庫和jQuery庫 -->    <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>    <!-- 消息發送框 -->    <div id="form">      <input id="m" autocomplete="off" /><button id="send">Send</button>    </div>  </body></html>

然后需要在里面加上JS來實現與服務器端的通信,將服務器端獲取的數據展示到客戶端,主要代碼如下:

<script>// 連接到Socket.IO服務器var socket = io.connect();$(function() { // 綁定發按鈕發送消息的事件  $('#send').on('click', function() {    var data = $('#m').val();   // 創建chat事件并發送消息給服務器    // emit('event') 表示發送了一個event命令    // 使用io.on('event')接收對應事件的信息    // 所以客戶端服務器端需要使用socket.on('chat')接收聊天信息    socket.emit('chat', { msg: data });    $('#m').val('');  });});$(function() {  // 接收消息并顯示到消息記錄框中  socket.on('sendmsg', function(msg) {    $('#messages').append($('<li>').text(msg.msg));  });});</script>

此時,可以執行:

$ node index.js

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

至此,一個簡陋的聊天室就實現了,有興趣的朋友可以在此基礎上進行擴展,實現功能更為復雜的聊天室。

項目源代碼:源碼下載

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 拉孜县| 城固县| 鹤壁市| 龙井市| 红河县| 黔江区| 平罗县| 缙云县| 洛宁县| 普洱| 修文县| 隆化县| 繁峙县| 花莲县| 光泽县| 乌审旗| 玉门市| 勐海县| 遂昌县| 宁强县| 固阳县| 霸州市| 慈利县| 尼木县| 芮城县| 柳江县| 巴林右旗| 徐闻县| 古交市| 湘潭市| 中山市| 嘉黎县| 米林县| 丹寨县| 潼关县| 饶河县| 砚山县| 卓资县| 公主岭市| 邻水| 乐东|