背景
在開發(fā)業(yè)務系統(tǒng)的時候,根據(jù)開發(fā)人員不同的技術棧,會使用不同的技術來開發(fā)微服務。本文是基于NodeJS提供的websocket的服務。在websocket通過分片的方式將字符串進行切割傳遞。
正文
1、源碼
server.js:
const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });
server.on('connection', (socket) => {
console.log('Client connected');
// 模擬分片傳輸
var message = 'Hello, WebSocket!數(shù)據(jù)映射的方式有兩種:';
console.log(message.length);
const chunkSize = 5;
const totalChunks = Math.ceil(message.length / chunkSize);
for (let i = 0; i < totalChunks; i++) {
const start = i * chunkSize;
const end = i === totalChunks - 1 ? message.length : start + chunkSize;
const chunk = message.slice(start, end);
socket.send(chunk);
console.log(`Sending chunk ${i + 1}/${totalChunks} - ${chunk}`);
}
socket.on('close', () => {
console.log('Client disconnected');
});
});
console.log('Server is running on port 8080');
client.js:
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080');
ws.on('open', () => {
console.log('連接已建立');
// 發(fā)送握手請求
ws.send(
JSON.stringify({
Upgrade: 'websocket',
Connection: 'Upgrade',
//Sec_WebSocket_Accept: createSecWebSocketAccept(ws),
})
);
// 發(fā)送分片消息
const message = 'Hello, WebSocket!';
const parts = chunk(message, 1024);
parts.forEach((part, index) => {
ws.send(JSON.stringify({ type: 'split', parts: [part], index: index }));
});
// 接收響應
ws.on('message', (message) => {
//const data = JSON.parse(message);
//if (data.type === 'response') {
console.log('接收到的響應:', message);
//}
});
// 關閉連接
ws.on('close', () => {
console.log('連接已關閉');
});
});
function chunk(str, size) {
const chunks = [];
for (let i = 0; i < str.length; i += size) {
chunks.push(str.slice(i, i + size));
}
return chunks;
}
function createSecWebSocketAccept(ws) {
const key = ws.url.split('=').pop();
const AcceptKey = WebSocket.createSecureContext().SecureSocket.prototype.sec_websocket_accept;
return AcceptKey.replace('$WS_KEY$', key);
}
2、運行
1>、啟動server.js
執(zhí)行命令:
node server.js
運行效果:
2>、啟動client.js
執(zhí)行命令:
node client.js
運行效果:
客戶端:
服務端:
文章來源:http://www.zghlxwxcb.cn/news/detail-803070.html
3、擴展
Nodejs提供http服務,參考如下案例:文章來源地址http://www.zghlxwxcb.cn/news/detail-803070.html
const http = require("http");
const hostname = "127.0.0.1";
const port = 3000;
//創(chuàng)建HTTP服務器,并提供兩個對象,一個請求(http.IncomingMessage對象)和一個
//響應(http.ServerResponse對象)
const server = http.createServer((req, res) => {
res.statusCode = 200;//設置statusCode屬性為200,以表相應成功
res.setHeader("Content-Type", "text/plain");//設置Content-Type響應頭
res.end("Hello World1111\n");//關閉響應,添加內(nèi)容作為end()的參數(shù)
})
//服務器啟動監(jiān)聽
server.listen(port, hostname, () => {
console.log(`服務器運行在http://${hostname}:${port}/`);
})
到了這里,關于【NodeJS】nodejs提供websocket服務的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!