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

付网站建设服务费记账网站定制公司哪家最权威

付网站建设服务费记账,网站定制公司哪家最权威,单位网站设计制作,网站建设 运营费用文章目录 一、前言二、WebSocket 基础2.1 WebSocket 与 HTTP 的区别2.2 WebSocket 的优点 三、搭建 WebSocket 服务端3.1 安装 ws 和 redis 库3.2 创建 WebSocket 服务端3.3 创建用户身份验证 四、前端实现 WebSocket 客户端4.1 创建 Vue 3 项目4.2 实现 WebSocket 连接和用户注…

文章目录

  • 一、前言
  • 二、WebSocket 基础
    • 2.1 WebSocket 与 HTTP 的区别
    • 2.2 WebSocket 的优点
  • 三、搭建 WebSocket 服务端
    • 3.1 安装 `ws` 和 `redis` 库
    • 3.2 创建 WebSocket 服务端
    • 3.3 创建用户身份验证
  • 四、前端实现 WebSocket 客户端
    • 4.1 创建 Vue 3 项目
    • 4.2 实现 WebSocket 连接和用户注册
  • 五、WebSocket 安全性与优化
    • 5.1 消息加密
    • 5.2 连接池与负载均衡

一、前言

在实时应用的开发中,WebSocket 已经成为实现高效、低延迟实时通讯的关键技术。通过建立持久的双向连接,WebSocket 不仅可以减少网络请求的开销,还能支持高效的数据传输。在本教程中,我们将创建一个更复杂的聊天应用,除了实现基本的 WebSocket 连接外,还将扩展一些常见的应用场景:私聊、群聊、消息持久化、用户身份验证等。

二、WebSocket 基础

2.1 WebSocket 与 HTTP 的区别

  • HTTP 协议:每次客户端请求时,都会重新建立连接,适用于请求-响应模式。
  • WebSocket 协议:创建一个持久连接,支持全双工通信,使得数据传输更高效。客户端和服务器之间能够实时发送和接收数据。

2.2 WebSocket 的优点

  • 低延迟:通过持久连接,避免了频繁的请求和响应开销。
  • 双向通信:客户端和服务器可以实时交换数据。
  • 减少带宽消耗:长期保持一个连接,不再需要重新建立连接。

三、搭建 WebSocket 服务端

我们将使用 Node.jsws 库创建 WebSocket 服务器,并通过 Redis 实现群聊的消息广播。

3.1 安装 wsredis

首先,创建 Node.js 项目并安装所需的依赖:

npm init -y
npm install ws redis

3.2 创建 WebSocket 服务端

server.js 中,我们将实现一个 WebSocket 服务器,支持群聊和私聊功能。

// server.js
const WebSocket = require('ws');
const redis = require('redis');// 创建 WebSocket 服务器,监听端口 8080
const wss = new WebSocket.Server({ port: 8080 });// 连接 Redis 客户端
const client = redis.createClient();// 存储所有连接的 WebSocket 客户端
let users = {};wss.on('connection', ws => {console.log('客户端已连接');// 处理消息接收ws.on('message', (message) => {const data = JSON.parse(message);const { type, user, content, target } = data;if (type === 'chat') {// 广播消息到所有客户端(群聊)broadcast(user, content);} else if (type === 'private') {// 私聊消息(发送到指定目标)privateMessage(user, target, content);} else if (type === 'history') {// 请求聊天记录getHistory(ws);}});// 连接成功时,给客户端一个欢迎消息ws.on('open', () => {ws.send(JSON.stringify({ user: 'server', content: '欢迎来到聊天室!' }));});// 监听客户端断开连接ws.on('close', () => {console.log('客户端已断开连接');// 用户断开连接后,清理用户信息Object.keys(users).forEach((key) => {if (users[key] === ws) {delete users[key];}});});// 广播消息到所有客户端function broadcast(user, content) {wss.clients.forEach(client => {if (client.readyState === WebSocket.OPEN) {client.send(JSON.stringify({ user, content }));}});// 将聊天记录保存到 Redis 中client.rpush('chatHistory', JSON.stringify({ user, content }));}// 私聊功能:发送消息给特定的用户function privateMessage(user, target, content) {const targetSocket = users[target];if (targetSocket) {targetSocket.send(JSON.stringify({ user, content }));} else {ws.send(JSON.stringify({ user: 'server', content: '用户不在线' }));}}// 获取历史聊天记录function getHistory(ws) {client.lrange('chatHistory', 0, -1, (err, messages) => {if (err) {ws.send(JSON.stringify({ user: 'server', content: '获取聊天记录失败' }));} else {ws.send(JSON.stringify({ user: 'server', content: messages }));}});}// 注册用户ws.on('message', (data) => {const message = JSON.parse(data);if (message.type === 'register') {users[message.user] = ws;console.log(`${message.user} 已注册`);}});
});

3.3 创建用户身份验证

为了实现用户身份验证,我们可以通过 WebSocket 连接时传递一个 token,来验证用户的身份。

// 用户身份验证
ws.on('connection', (socket, request) => {const token = request.url.split('token=')[1]; // 从 URL 中获取 tokenif (isValidToken(token)) {// 如果 token 验证通过,继续连接socket.send('身份验证通过');} else {socket.close(); // 否则关闭连接}
});

四、前端实现 WebSocket 客户端

我们将使用 Vue 3 创建聊天应用,并实现消息发送、接收、私聊等功能。

4.1 创建 Vue 3 项目

通过 Vue CLI 创建一个新的 Vue 项目:

vue create websocket-chat

4.2 实现 WebSocket 连接和用户注册

ChatRoom.vue 中实现 WebSocket 客户端:

<template><div class="chat-room"><div class="messages"><div v-for="(message, index) in messages" :key="index" class="message"><strong>{{ message.user }}:</strong> {{ message.content }}</div></div><input v-model="newMessage" @keyup.enter="sendMessage" placeholder="Type a message..." /><button @click="sendPrivateMessage">私聊</button></div>
</template><script>
export default {data() {return {socket: null,messages: [],newMessage: '',user: 'User' + Math.floor(Math.random() * 1000),targetUser: '', // 私聊目标用户};},mounted() {this.socket = new WebSocket('ws://localhost:8080');this.socket.onopen = () => {this.socket.send(JSON.stringify({ type: 'register', user: this.user }));};this.socket.onmessage = (event) => {const message = JSON.parse(event.data);this.messages.push(message);this.scrollToBottom();};},methods: {sendMessage() {if (this.newMessage.trim()) {this.socket.send(JSON.stringify({ type: 'chat', user: this.user, content: this.newMessage }));this.newMessage = '';}},sendPrivateMessage() {if (this.targetUser && this.newMessage.trim()) {this.socket.send(JSON.stringify({type: 'private',user: this.user,target: this.targetUser,content: this.newMessage,}));this.newMessage = '';}},scrollToBottom() {const container = this.$refs.messageContainer;container.scrollTop = container.scrollHeight;},},
};
</script>

五、WebSocket 安全性与优化

5.1 消息加密

为了保障通信安全,可以使用 AES 加密协议加密传输的消息内容,确保数据在传输过程中不会被窃取。

5.2 连接池与负载均衡

当 WebSocket 服务器需要处理大量连接时,可以使用连接池和负载均衡技术。例如,使用 Nginx 配置 WebSocket 反向代理。


到这里,这篇文章就和大家说再见啦!我的主页里还藏着很多 篇 前端 实战干货,感兴趣的话可以点击头像看看,说不定能找到你需要的解决方案~
创作这篇内容花了很多的功夫。如果它帮你解决了问题,或者带来了启发,欢迎:
点个赞❤️ 让更多人看到优质内容
关注「前端极客探险家」🚀 每周解锁新技巧
收藏文章⭐️ 方便随时查阅
📢 特别提醒:
转载请注明原文链接,商业合作请私信联系
感谢你的阅读!我们下篇文章再见~ 💕

在这里插入图片描述


文章转载自:

http://KMJzsFqI.Lqypx.cn
http://1fu8FtuX.Lqypx.cn
http://dVV2lii3.Lqypx.cn
http://rxpeSOGb.Lqypx.cn
http://3U5itRNT.Lqypx.cn
http://nPRSfNGP.Lqypx.cn
http://druZpN2Z.Lqypx.cn
http://JIp8auDp.Lqypx.cn
http://L2EwVNXa.Lqypx.cn
http://6EpNkqQt.Lqypx.cn
http://azQvdLA6.Lqypx.cn
http://Eo1vssHe.Lqypx.cn
http://Sfr1YzMv.Lqypx.cn
http://Fm4PLxes.Lqypx.cn
http://sTPhNHKP.Lqypx.cn
http://oZKZcQGf.Lqypx.cn
http://zEmucJf8.Lqypx.cn
http://WQdnje5b.Lqypx.cn
http://XYJMJpaf.Lqypx.cn
http://iOPYlEtV.Lqypx.cn
http://EarqVPvr.Lqypx.cn
http://TApsTMwT.Lqypx.cn
http://KFtDTtKS.Lqypx.cn
http://LVYnlTj1.Lqypx.cn
http://GGOZY52k.Lqypx.cn
http://9BxwUOA0.Lqypx.cn
http://7agOHZnQ.Lqypx.cn
http://arhK9xw2.Lqypx.cn
http://QjxNmtMj.Lqypx.cn
http://o5fBF6qK.Lqypx.cn
http://www.dtcms.com/wzjs/738183.html

相关文章:

  • 外贸网站海外推广网站策划主题
  • 中国工信部网站备案做虚拟币网站需要什么手续
  • 遵义网站制作报价建设seo网站
  • 网站公网安备链接怎么做自己做网站好还是凡科
  • 公司有网站域名,如何做网站代码编写网站
  • 做网站的基本条件企业运营管理名词解释
  • 银医网站建设方案wordpress 截取
  • 天水 网站建设到国外网站上做兼职翻译
  • 网站左悬浮代码网站维护管理
  • ui设计 国外网站山东查询网站备案
  • 自己怎么做机构网站哈尔滨市香坊区建设局网站
  • 三合一网站建设方案不让在建设门户网站
  • 如何创建自己的公司网站电脑和手机同步编辑wordpress
  • 去国外做网站wordpress 需要授权吗
  • 99作文网泰安网站建设优化技术
  • 娱乐彩票网站建设制作公司介绍怎么写
  • 网站建设算研发费用吗wordpress 写权限设置
  • 网站网页设计是什么外包网站推荐
  • 做多肽的都有哪些网站做的非常好的网站案例
  • 网站代码如何导入建设银行网站登陆不上
  • 阿里云企业网站建设教程淘宝软件营销网站建设
  • 网站程序组成餐饮品牌全案策划公司
  • 有没有做网站源代码修改的网页设计最牛的网站建设
  • 官方网站链接如何做阳江网络12345问政平台
  • 静态网站做新闻系统今天足球赛事推荐
  • 老鸭窝网站正在建设中网站美工设计
  • 网站开发体会免费全能网站空间
  • 可以直接进入网站的正能量照片公司建设网站需要去哪报备
  • 哪些做直播卖食品的网站软文营销的技巧有哪些?
  • 高端网站制作网站设计做网站一定要psd吗