当前位置: 首页 > news >正文

万网网站备案查询竞价推广账户托管费用

万网网站备案查询,竞价推广账户托管费用,深圳网站建设网站制作网站推广,百川网站维护Node.js实现WebSocket教程 1. WebSocket简介 WebSocket是一种在单个TCP连接上提供全双工通信的协议,允许服务器和客户端之间进行实时、双向通信。本教程将详细讲解如何在Node.js中实现WebSocket。 2. 技术选型 我们将使用ws库来实现WebSocket服务器,…

Node.js实现WebSocket教程

1. WebSocket简介

WebSocket是一种在单个TCP连接上提供全双工通信的协议,允许服务器和客户端之间进行实时、双向通信。本教程将详细讲解如何在Node.js中实现WebSocket。

2. 技术选型

我们将使用ws库来实现WebSocket服务器,并结合express创建Web应用。

2.1 安装依赖

# 创建项目目录
mkdir nodejs-websocket-demo
cd nodejs-websocket-demo# 初始化项目
npm init -y# 安装依赖
npm install express ws uuid

依赖说明:

  • express: Web应用框架
  • ws: WebSocket服务器实现
  • uuid: 生成唯一标识符

3. 项目结构

nodejs-websocket-demo/
│
├── public/
│   ├── index.html
│   └── client.js
├── server.js
└── package.json

4. 详细实现

4.1 WebSocket服务器 (server.js)

const express = require('express');
const http = require('http');
const WebSocket = require('ws');
const { v4: uuidv4 } = require('uuid');const app = express();
const server = http.createServer(app);
const wss = new WebSocket.Server({ server });// 存储客户端连接
const clients = new Map();// 静态文件服务
app.use(express.static('public'));// WebSocket连接处理
wss.on('connection', (ws) => {// 为每个客户端分配唯一IDconst clientId = uuidv4();// 存储客户端连接clients.set(clientId, ws);// 发送客户端IDws.send(JSON.stringify({type: 'connection',clientId: clientId}));// 广播新用户连接broadcast({type: 'userJoined',clientId: clientId,message: `用户 ${clientId} 已加入聊天`}, clientId);// 消息处理ws.on('message', (message) => {try {const parsedMessage = JSON.parse(message);switch(parsedMessage.type) {case 'chat':handleChatMessage(clientId, parsedMessage);break;case 'typing':handleTypingNotification(clientId, parsedMessage);break;default:console.log('未知消息类型:', parsedMessage.type);}} catch (error) {console.error('消息解析错误:', error);}});// 连接关闭处理ws.on('close', () => {// 移除客户端clients.delete(clientId);// 广播用户离开broadcast({type: 'userLeft',clientId: clientId,message: `用户 ${clientId} 已离开聊天`}, clientId);});
});// 聊天消息处理
function handleChatMessage(senderId, message) {broadcast({type: 'chat',clientId: senderId,message: message.message}, senderId);
}// 输入状态通知
function handleTypingNotification(senderId, message) {broadcast({type: 'typing',clientId: senderId,isTyping: message.isTyping}, senderId);
}// 广播消息
function broadcast(message, excludeClientId = null) {clients.forEach((client, clientId) => {if (client.readyState === WebSocket.OPEN && clientId !== excludeClientId) {client.send(JSON.stringify(message));}});
}// 服务器启动
const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {console.log(`WebSocket服务器运行在 ${PORT} 端口`);
});

4.2 客户端HTML (public/index.html)

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>WebSocket聊天室</title><style>body { font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto; padding: 20px; }#chat-messages {height: 300px;overflow-y: scroll;border: 1px solid #ccc;padding: 10px;margin-bottom: 10px;}</style>
</head>
<body><div id="chat-messages"></div><input type="text" id="message-input" placeholder="输入消息"><button id="send-btn">发送</button><script src="client.js"></script>
</body>
</html>

4.3 客户端JavaScript (public/client.js)

const socket = new WebSocket('ws://localhost:3000');
let clientId = null;const chatMessages = document.getElementById('chat-messages');
const messageInput = document.getElementById('message-input');
const sendBtn = document.getElementById('send-btn');// WebSocket事件处理
socket.addEventListener('open', (event) => {appendMessage('系统', '连接成功');
});socket.addEventListener('message', (event) => {const message = JSON.parse(event.data);switch(message.type) {case 'connection':clientId = message.clientId;appendMessage('系统', `您的ID是: ${clientId}`);break;case 'chat':appendMessage(message.clientId, message.message);break;case 'userJoined':case 'userLeft':appendMessage('系统', message.message);break;case 'typing':handleTypingNotification(message);break;}
});socket.addEventListener('close', (event) => {appendMessage('系统', '连接已关闭');
});// 发送消息
sendBtn.addEventListener('click', sendMessage);
messageInput.addEventListener('keypress', (e) => {if (e.key === 'Enter') {sendMessage();}
});function sendMessage() {const message = messageInput.value.trim();if (message) {socket.send(JSON.stringify({type: 'chat',message: message}));appendMessage(clientId, message);messageInput.value = '';}
}// 消息追加到聊天窗口
function appendMessage(sender, text) {const messageEl = document.createElement('div');messageEl.innerHTML = `<strong>${sender}:</strong> ${text}`;chatMessages.appendChild(messageEl);chatMessages.scrollTop = chatMessages.scrollHeight;
}// 处理打字状态通知
function handleTypingNotification(message) {// 可以在这里实现打字状态提示
}

5. 运行项目

# 启动服务器
node server.js# 访问 http://localhost:3000

6. 功能特点

  1. 实时双向通信
  2. 唯一客户端标识
  3. 广播消息机制
  4. 连接/断开事件处理
  5. 聊天消息和系统通知

7. 性能与扩展建议

  1. 生产环境考虑使用Redis等外部存储管理WebSocket连接
  2. 增加身份验证机制
  3. 实现消息持久化
  4. 使用负载均衡

8. 安全注意事项

  1. 使用WSS(WebSocket Secure)
  2. 实现连接速率限制
  3. 验证和过滤消息内容
  4. 防止跨站WebSocket劫持
http://www.mmbaike.com/news/45541.html

相关文章:

  • 网站怎么做才能用手机打开产品如何做网络推广
  • 商圈外卖网站怎么做关键词首页排名优化平台
  • 企业局域网做网站屏蔽手机网站智能建站
  • 做网站找外包好吗seo广告平台
  • 9377 这种网站怎么做产品设计公司
  • 龙华网站建设百度广告代理商加盟
  • 企业网址怎么弄南京seo网站管理
  • 网站安全建设 应用开发野狼seo团队
  • 长沙市在建工程项目seo软件视频教程
  • 做科学小制作的视频网站移动建站优化
  • 门户网站是如何做引流的哪个搜索引擎能搜敏感内容
  • 网站备案icp网站排名查询工具有哪些
  • 网站开发完了备案营销型网站开发公司
  • ipv6在家做网站广州日新增51万人
  • 武汉市住建局零基础seo入门教学
  • 中国建设网官方网站企业登录品牌策划包括哪几个方面
  • 一个可以看qq空间的网站长春seo代理
  • 江都网站建设付费推广
  • 网站建设国内公司网站建设方案模板
  • wordpress关闭rss功能新站seo快速排名 排名
  • wordpress 外链裁剪兰州网站seo服务
  • 怎么做日本钓鱼网站吗搜索网站大全
  • 淘宝客做自己的网站无锡谷歌优化
  • 苏州新区做网站福建seo学校
  • 东莞网站建设相关技术怎么自己做一个小程序
  • 用vs做网站原型代写文章
  • 做编程的网站有哪些内容企业网站seo哪里好
  • 苏州排名搜索优化seo查询在线
  • wordpress调整菜单栏距离百度优化关键词
  • 网站怎么更换页面图片在百度怎么发广告做宣传