創建一個基于Node.js的實時聊天應用

在當今數字化社會,實時通訊已成為人們生活中不可或缺的一部分。無論是在社交媒體平臺上與朋友交流,還是在工作場合中與同事協作,實時聊天應用都扮演著重要角色。與此同時,Node.js作為一種流行的后端技術,為開發者提供了強大的工具和靈活的環境,使得創建實時聊天應用變得輕而易舉。

在本篇博客中,我們將探討如何利用Node.js構建一個基于WebSocket協議的實時聊天應用。WebSocket是一種在單個TCP連接上提供全雙工通信的協議,適用于需要實時性的應用場景,比如在線游戲、實時監控以及聊天應用。

首先,我們需要創建一個基本的Node.js應用,并安裝一些必要的依賴。在命令行中運行以下命令:

mkdir real-time-chat
cd real-time-chat
npm init -y
npm install express ws

上面的命令中,我們創建了一個名為real-time-chat的項目,并安裝了Express框架和ws模塊,分別用于處理HTTP請求和WebSocket連接。

接下來,我們來編寫服務器端的代碼。在項目根目錄下創建一個名為server.js的文件,并添加以下代碼:

const express = require('express');
const http = require('http');
const WebSocket = require('ws');const app = express();
const server = http.createServer(app);
const wss = new WebSocket.Server({ server });wss.on('connection', (ws) => {ws.on('message', (message) => {wss.clients.forEach((client) => {if (client !== ws && client.readyState === WebSocket.OPEN) {client.send(message);}});});
});server.listen(3000, () => {console.log('Server started on http://localhost:3000');
});

在上面的代碼中,我們創建了一個Express應用,并在3000端口啟動了一個HTTP服務器。同時,我們使用WebSocket模塊創建了一個WebSocket服務器,并實現了簡單的消息廣播功能。

現在,我們已經完成了服務器端的搭建。接下來,我們需要創建一個簡單的客戶端界面來與服務器通信。在項目根目錄下創建一個名為index.html的文件,并添加以下代碼:

<!DOCTYPE html>
<html>
<head><title>Real Time Chat</title>
</head>
<body><input type="text" id="message" placeholder="Type your message here"><button onclick="sendMessage()">Send</button><ul id="chat"></ul><script>const socket = new WebSocket('ws://localhost:3000');const chat = document.getElementById('chat');socket.onmessage = (event) => {const li = document.createElement('li');li.textContent = event.data;chat.appendChild(li);};function sendMessage() {const message = document.getElementById('message').value;socket.send(message);}</script>
</body>
</html>

在上面的代碼中,我們創建了一個簡單的HTML界面,包括一個文本輸入框用于輸入消息、一個發送按鈕和一個用于顯示聊天消息的列表。通過WebSocket與服務器建立連接,并實現了接收和發送消息的功能。

最后,我們啟動服務器并在瀏覽器中打開index.html文件,即可看到實時聊天應用的界面。您可以在同一臺機器上打開多個瀏覽器窗口,模擬多人聊天的場景,體驗實時通訊的魅力。

通過本篇博客的介紹,您學會了如何利用Node.js和WebSocket創建一個簡單的實時聊天應用。當然,這只是一個入門級的示例,在實際應用中還有很多功能和性能優化的空間。希望本文能對您有所啟發,讓您深入了解實時通訊技術,不斷完善和優化您的應用。

Node.js視頻教程請點擊:Node.js從基礎到項目實踐_在線視頻教程-CSDN程序員研修院

最后問候親愛的朋友們,并邀請你們閱讀我的(博主簡介)全新著作。
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697004.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697004.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697004.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CrossOver虛擬機軟件2024有哪些功能?最新版本支持哪些游戲?

CrossOver由codewaver公司開發的類虛擬機軟件&#xff0c;目的是使linux和Mac OS X操作系統和window系統兼容。CrossOver不像Parallels或VMware的模擬器&#xff0c;而是實實在在Mac OS X系統上運行的一個軟件。CrossOvers能夠直接在Mac上運行Windows軟件與游戲&#xff0c;而不…

Java架構師之路七、大數據:Hadoop、Spark、Hive、HBase、Kafka等

目錄 Hadoop&#xff1a; Spark&#xff1a; Hive&#xff1a; HBase&#xff1a; Kafka&#xff1a; Java架構師之路六、高并發與性能優化&#xff1a;高并發編程、性能調優、線程池、NIO、Netty、高性能數據庫等。-CSDN博客Java架構師之路八、安全技術&#xff1a;Web安…

[前端]開啟VUE之路-NODE.js版本管理

VUE前端開發框架&#xff0c;以Node.js為底座。用歷史性的項目來學習&#xff0c;為了降低開發環境的影響因素&#xff0c;各種版本號最好能一致。前端項目也是一樣。為了項目能夠快速啟動&#xff0c;Node.js的版本管理&#xff0c;可以帶來很大的便利&#xff08;node.js快速…

2023年全年回顧

本年度比較折騰&#xff0c;整體而言可以分為兩個大的階段&#xff0c;簡單而言&#xff0c;轉崗前和轉崗后。 個人收獲 據說程序員有幾大浪漫&#xff0c;比如操作系統、編譯器、瀏覽器、游戲引擎等。 之前參與過游戲引擎&#xff0c;現在有機會參與存儲業務交付&#xff0c…

LangChain支持嗶哩嗶哩視頻總結

是基于LangChain框架下的開發&#xff0c;所以最開始請先 pip install Langchain pip install bilibili-api-python 技術要點&#xff1a; 使用Langchain框架自帶的Document loaders 修改BiliBiliLoader的源碼&#xff0c;自帶的并不支持當前b站的視頻加載 源碼文件修改&a…

如何在 Emacs Prelude 上使用 graphviz 的 dot 繪制流程圖

文章目錄 如何在Emacs Prelude上使用graphviz的dot繪制流程圖 <2022-08-23 周二> 如何在Emacs Prelude上使用graphviz的dot繪制流程圖 標題中的Emacs Prelude是指&#xff1a;bbatsov/prelude&#xff0c;在custom.el中添加即可&#xff1a; ;;; graphviz (prelude-re…

【高德地圖】Android高德地圖繪制標記點Marker

&#x1f4d6;第4章 Android高德地圖繪制標記點Marker ?繪制默認 Marker?繪制多個Marker?繪制自定義 Marker?Marker點擊事件?Marker動畫效果?Marker拖拽事件?繪制默認 Infowindow&#x1f6a9;隱藏InfoWindow 彈框 ?繪制自定義 InfoWindow&#x1f6a9;實現 InfoWindow…

Java 中 CopyOnWriteArrayList和CopyOnWriteArraySet

什么是CopyOnWriteArrayList和CopyOnWriteArraySet CopyOnWriteArrayList和CopyOnWriteArraySet都是Java并發編程中提供的線程安全的集合類。 CopyOnWriteArrayList是一個線程安全的ArrayList&#xff0c;其內部通過volatile數組和顯式鎖ReentrantLock來實現線程安全。它采用…

解決ios17無法復制的問題

原代碼寫過一片js實現復制的代碼 那段代碼有問題 以下是之前寫的一段有問題的原代碼&#xff1a; let url "kkkkkk";const hiddenTextarea document.createElement("textarea");hiddenTextarea.style.position "absolute";hiddenTextarea.st…

ArcgisForJS如何實現添加含圖片樣式的點要素?

文章目錄 0.引言1.加載底圖2.獲取點要素的坐標3.添加含圖片樣式的幾何要素4.完整實現 0.引言 ArcGIS API for JavaScript 是一個用于在Web和移動應用程序中創建交互式地圖和地理空間分析應用的庫。本文在ArcGIS For JavaScript中使用Graphic對象來創建包含圖片樣式的點要素。 …

MIT-6.824-Lab2,Raft部分筆記|Use Go

文章目錄 前記Paper6&#xff1a;RaftLEC5、6&#xff1a;RaftLAB22AtaskHintlockingstructureguide設計與編碼 2BtaskHint設計與編碼 2CtaskHint question后記 LEC5&#xff1a;GO, Threads, and Raftgo threads技巧raft實驗易錯點debug技巧 前記 趁著研一考完期末有點點空余…

軟考29-上午題-【數據結構】-排序

一、排序的基本概念 1-1、穩定性 穩定性指的是相同的數據所在的位置經過排序后是否發生變化。若是排序后&#xff0c;次序不變&#xff0c;則是穩定的。 1-2、歸位 每一趟排序能確定一個元素的最終位置。 1-3、內部排序 排序記錄全部存放在內存中進行排序的過程。 1-4、外部…

vue使用.sync和update實現父組件與子組件數據綁定的案例

在 Vue 中&#xff0c;.sync 是一個用于實現雙向數據綁定的特殊修飾符。它允許父組件通過一種簡潔的方式向子組件傳遞一個 prop&#xff0c;并在子組件中修改這個 prop 的值&#xff0c;然后將修改后的值反饋回父組件&#xff0c;實現雙向數據綁定。 使用 .sync 修飾符的基本語…

微信小程序 --- wx.request網絡請求封裝

網絡請求封裝 網絡請求模塊難度較大&#xff0c;如果學習起來感覺吃力&#xff0c;可以直接學習 [請求封裝-使用 npm 包發送請求] 以后的模塊 01. 為什么要封裝 wx.request 小程序大多數 API 都是異步 API&#xff0c;如 wx.request()&#xff0c;wx.login() 等。這類 API 接口…

【精選】Java面向對象進階——內部類

&#x1f36c; 博主介紹&#x1f468;?&#x1f393; 博主介紹&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高興認識大家~ ?主攻領域&#xff1a;【滲透領域】【應急響應】 【Java】 【VulnHub靶場復現】【面試分析】 &#x1f389;點贊?評論?收藏 …

【操作系統】磁盤文件管理系統

實驗六 磁盤文件管理的模擬實現 實驗目的 文件系統是操作系統中用來存儲和管理信息的機構&#xff0c;具有按名存取的功能&#xff0c;不僅能方便用戶對信息的使用&#xff0c;也有效提高了信息的安全性。本實驗模擬文件系統的目錄結構&#xff0c;并在此基礎上實現文件的各種…

FISCO BCOS(十七)利用腳本進行區塊鏈系統監控

要利用腳本進行區塊鏈系統監控&#xff0c;你可以使用各種編程語言編寫腳本&#xff0c;如Python、Shell等 利用腳本進行區塊鏈系統監控可以提高系統的穩定性、可靠性&#xff0c;并幫助及時發現和解決潛在問題&#xff0c;從而確保區塊鏈網絡的正常運行。本文可以利用腳本來解…

Java實戰:分布式Session解決方案

本文將詳細介紹Java分布式Session的解決方案。我們將探討分布式Session的基本概念&#xff0c;以及常見的分布式Session管理技術&#xff0c;如Cookie、Token、Redis等。此外&#xff0c;我們將通過具體的示例來展示如何在Java應用程序中實現分布式Session。本文適合希望了解和…

Swift基礎知識:21.Swift繼承

在 Swift 中&#xff0c;類可以通過繼承從其他類獲得屬性和方法。被繼承的類稱為父類&#xff08;或超類&#xff09;&#xff0c;繼承的類稱為子類。子類可以繼承父類的特性&#xff0c;并且可以添加自己的新特性。繼承允許類層次結構中的代碼重用和多態性。 定義一個基類&am…

Vue3 使用動態組件 component

component 標簽&#xff1a;用于動態渲染標簽或組件。 語法格式&#xff1a; <component is"標簽或組件名">標簽內容</component> 動態渲染標簽&#xff1a; <template><h3>我是父組件</h3><component is"h1">動態…