高并发 前后置服务器 框架设计

目录

一:高并发

二:前后置服务器分离

三:共享内存共用


一:高并发

什么是高并发

高:允许同时上线的客户端数量高,即服务器能够同时接收到多(数量庞大)个客户端的连接请求(使用到epoll  IO多路复用技术)

并发:可以同时处理多个客户端的业务,客户端不需要“排队”等待服务器处理业务(使用到线程池完成并发设计)

高并发难点在于 IO操作(接收到的业务怎么进行处理)

内存(程序) ---》 硬盘(数据库文件)  ---》 内存(程序)

服务器要承载极多(数量庞大)个客户端对接(),同时还要承载极多(数量庞大)个客户端与其传递分析业务数据(并发),要执行线程池选择哪个线程执行任务,在接收到数据后还要做繁琐的IO操作

试想若是服务器设计为:业务服务器+文件服务器

业务服务器(硬件配置重点在 CPU算力+内存)(完成高并发所有的内存操作)

   文件服务器(硬件配置重点在硬盘)(完成高并发所有的文件操作)

将内存操作和硬盘操作分开处理,这样的设计能否有效解决高并发存在的问题?

思路大致为:由业务服务器去处理高并发所有的内存操作,若业务中涉及有文件操作则可以访问文件服务器调用指令,以此高并发存在的问题

二:前后置服务器分离

前后置服务器分离之间使用到IPC进程间通信:共享内存(需要共用) + 消息队列 + 信号量 

前置服务器:客户端对接 + 业务分析处理

后置服务器:文件处理 + 数据库处理

三:共享内存共用

共享内存共用设计思路:索引区 + 数据区

索引区  int数组 单元格4字节

数据区 数据区单元格大小要能够容纳最大的业务处理

前置服务器+后置服务器(两个进程)     

前置服务器可对索引区0对应数据区进行写数据

后置服务器可对索引去1对应数据区进行读数据

如下图

前置服务器:数据写入 共享内存[数据区] (索引由0到1,后置服务器对索引1对应数据区及时读数据处理)

共享内存中存在数据后(索引为1),

可以使用消息队列 也就是前置服务器[写完数据后]发送消息给后置服务器[令其可以及时读取数据],

如下图,根据 共享内存[索引区1代表有数据 索引区0代表没有数据 目前是有数据表示为1]索引为1对应数据区,后置服务器可以及时读取数据

读取数据后(索引由1到0),清空数据区数据     (memcpy + memset)

索引区为0代表无数据,前置服务器就可以进行下一次 数据的写入

指针偏移:索引区 数据区 

索引区操作公式

memcpy(共享内存首地址+sizeof(int)*索引下标,数据,sizeof(int)) 

数据区操作公式

memcpy(共享内存首地址+索引区总长度+单个数据块长度*索引区下标,数据指针,数据大小)

### 微信小程序前后端开发实战教程 #### 小程序前端开发要点 在微信小程序的前端开发中,开发者可以利用WXML(WeiXin Markup Language)、WXSS(WeiXin Style Sheets),以及JavaScript来构建页面逻辑。对于轮播图这样的组件,在传统网页开发中可能涉及复杂的HTML、CSS布局加上JavaScript动画效果;但在小程序环境中,则可以通过更简洁的方式完成相同功能[^3]。 ```html <!-- WXML 结构 --> <swiper indicator-dots="{{true}}" autoplay="{{true}}"> <block wx:for="{{imageUrls}}" wx:key="unique"> <swiper-item> <image src="{{item}}"/> </swiper-item> </block> </swiper> ``` #### 后端接口设计与调用 为了使小程序能够获取动态数据并与其他服务交互,必须建立可靠的后端支持。这包括但不限于RESTful API的设计和实现。当涉及到发送网络请求时,`wx.request()`方法成为连接客户端和服务端的关键桥梁之一[^4]。 ```javascript // JavaScript 请求示例 wx.request({ url: 'https://example.com/data', // 替换成实际URL method: 'GET', success(res){ console.log('成功接收:', res.data); }, fail(err){ console.error('失败:', err); } }); ``` #### 数据加载提示优化用户体验 考虑到移动互联网环境下可能存在延迟情况,适时显示loading状态有助于提升用户的等待体验感。通过简单的API调用来展示或隐藏进度条是非常直观有效的方法。 ```javascript // 显示 loading 提示框 wx.showLoading({ title: '正在加载...', }); // 隐藏 loading 提示框 setTimeout(function () { wx.hideLoading(); }, 2000); // 模拟异步操作后的关闭动作 ```
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenruhan_QAQ_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值