node實現語音聊天的方法:1、使用nodejs模塊express創建一個web服務器;2、創建https連接;3、通過“socket.io”實現客戶端與服務端實時通信即可。
本教程操作環境:Windows10系統、node-v16.18.0版、DELL G3電腦
node怎么實現語音聊天?
基于nodejs的語音聊天
描述
程序在 iamshaunjp 的群聊功能基礎上利用webRTC技術,添加了語音群聊功能,在其他人鍵盤輸入時,會出現類似微信的對方正在輸入字樣。
- demo:https://www.php.cn/link/b2fc614266ad3627dca4dc5d37885d58
- source code: https://www.php.cn/link/12a8193db4825679dc9baf49305efe92
使用的nodejs模塊
express
:創建一個web服務器https
:創建https連接(局域網或者外網webRTC需要https連接,具體見tutoril)socket.io
:客戶端與服務端實時通信
js文件
chat.js
:實現按鈕事件的注冊、文本數據的發送等record.js
:實現語音消息的錄取、播放、發送等
結構圖和流程圖
文本通信
詳情見public/js/chat.js
注釋
發送數據
- 進入頁面進行與服務器的
socket
連接 - 客戶端輸入文本數據
- 客戶點擊
sent
按鈕,觸發click
事件,并產生chat
事件準備想服務器emit
soket
連接發送給服務器chat事件和客戶端產生的數據
接收數據
socket
接受到服務器發送來的data和服務器發送來的chat事件- 提取data文本
- js在
index.html
添加文本數據,完成接收數據并顯示
語音通信
詳情見public/js/record.js
注釋
- 接受和發送語音數據類似與文本數據的通信
- 利用
webRTC
獲取到用戶的視頻或者音頻轉換為blob
格式數據,并發送給服務器數據。 - 接受消息時,數據類型是
blob
格式,對blob
數據解析,利用html5的audio標簽進行播放
服務器轉發數據
客戶端發送給服務器數據,服務器觸發chat
事件,將客戶端發送來的數據以廣播的形式發送到每一個客戶端,完成群聊的功能。
創建https證書
在localhost中使用webRTC不需要使用https,但是在局域網或者外網使用webRTC,必須強制使用webRTC,這里采用自己生成證書供測試使用,具體生成方法和設置https方法參考博客:
- 生成自己簽名的證書(有效期365天)
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
登錄后復制
- 使用https連接的express,例子如下:
var fs = require('fs'), https = require('https'), express = require('express'), app = express(); https.createServer({ key: fs.readFileSync('key.pem'), cert: fs.readFileSync('cert.pem') }, app).listen(55555); app.get('/', function (req, res) { res.header('Content-type', 'text/html'); return res.end('<h1>Hello, Secure World!</h1>'); });
登錄后復制
推薦學習:《node.js視頻教程》