异步服务器框架设计

简介:

缘起

在网络编程中,经常出现如下场景:编写特定逻辑服务器,该逻辑服务器依赖于后端的N种服务器。比如需要获取N种服务数据,或者需要N个步骤。对于这样的应用,同步调用将导致逻辑服务器的性能极低,异步调用是首选。问题:如何抽象通用的异步服务器网络框架,降低编写特定逻辑服务器的工作量?

分析

要抽象这样的异步服务器网络框架,需要处理如下问题:

1)session管理(通讯管理和数据管理);

2)超时处理;

3)异常处理;

4)状态管理(流程抽象)。

为了简化分析,从依赖单个后端服务器的情景开始分析。对于只需一次网络调用的逻辑服务,只需要考虑:session管理、超时处理、异常处理,session数据管理+简单的定时器+超时回调函数 即可满足该需求。这种服务器状态简单: 正常流程:发包、回包、获取请求数据、处理流程、返回用户请求; 异常流程: 超时、获取请求数据、处理流程、返回用户请求。

对于需要N个网络调用的逻辑服务,其每个网络调用也可以简化成上述单次网络调用的流程。问题是如何组织这N个网络调用,如何管理由这N个调用组成的各种状态?

异步服务器框架设计思路

方法一:抽象状态,利用“状态 <=> 回调函数 映射表”实现各种状态和动作间的转换关系。这种方法并不好,原因在于全局状态过多,不利于抽象。

方法二:State模式。封装每一个网络调用成Context(维护每个调用自身的状态),每个Context拥有如下统一动作(接口): 发包函数、回包处理函数、超时处理函数。通过组合Context实现对状态的管理。若N个调用不存在时序关系,则将每个调用Context组成一个更大的Context,该Context代表一个更大的状态。当所有的子Context调用完成后,则该Context完成,无状态转移。若N个调用存在时序关系,则按照调用时序,将各个Context组成一个状态转移链,依次处理各个Context并转移到下一个Context,当最后一个Context完成后,则整个请求完成。

参考

设计模式学习(五):行为型模式

敏捷软件开发              2003


本文转自 zhenjing 博客园博客,原文链接:http://www.cnblogs.com/zhenjing/archive/2012/07/17/asynchronous_server_framework.html   ,如需转载请自行联系原作者


相关文章
|
1月前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
|
1月前
|
Python
Flask学习笔记(二):基于Flask框架上传图片到服务器端并原名保存
关于如何使用Flask框架上传图片到服务器端并以其原名保存的教程。
76 1
|
1月前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
31 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
|
1月前
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
48 1
|
1月前
|
Web App开发 JavaScript 前端开发
使用Node.js和Express框架构建Web服务器
使用Node.js和Express框架构建Web服务器
|
1月前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
49 0
|
3月前
|
JSON API 数据格式
基于服务器响应的实时天气数据进行JSON解析的详细代码及其框架
【8月更文挑战第25天】这段资料介绍了一个使用Python从服务器获取实时天气数据并解析JSON格式数据的基本框架。主要分为三个部分:一是安装必要的`requests`库以发起HTTP请求获取数据,同时利用Python内置的`json`库处理JSON数据;二是提供了具体的代码实现,包括获取天气数据的`get_weather_data`函数和解析数据的`parse_weather_data`函数;三是对代码逻辑进行了详细说明,包括如何通过API获取数据以及如何解析这些数据来获取温度和天气描述等信息。用户需要根据实际使用的天气API调整代码中的API地址、参数和字段名称。
|
3月前
|
缓存 监控 中间件
构建高效的Go语言Web服务器:基于Fiber框架的性能优化实践
在追求极致性能的Web开发领域,Go语言(Golang)凭借其高效的并发处理能力、垃圾回收机制及简洁的语法赢得了广泛的青睐。本文不同于传统的性能优化教程,将深入剖析如何在Go语言环境下,利用Fiber这一高性能Web框架,通过精细化配置、并发策略调整及代码层面的微优化,构建出既快速又稳定的Web服务器。通过实际案例与性能测试数据对比,揭示一系列非直觉但极为有效的优化技巧,助力开发者在快节奏的互联网环境中抢占先机。
|
5月前
|
监控 前端开发 JavaScript
JS Navigator.sendBeacon 可靠的、异步地向服务器发送数据
Navigator.sendBeacon 是一个用于发送少量数据到服务器的 API,尤其适用于在页面即将卸载时发送数据,如日志记录、用户行为分析等。 与传统的 AJAX 请求不同,sendBeacon 方法的设计目标是确保数据在页面卸载(例如用户关闭标签页或导航到新页面)时能够可靠地发送。 Navigator.sendBeacon 方法可用于通过 HTTP POST 将少量数据异步传输到 Web 服务器。 它主要用于将统计数据发送到 Web 服务器,同时避免了用传统技术(如:XMLHttpRequest)发送分析数据的一些问题。
124 1
|
5月前
|
缓存 JavaScript 前端开发
Nuxt.js实战:Vue.js的服务器端渲染框架
Nuxt.js提供了开发、构建和部署的完整工作流。使用nuxt命令启动开发服务器,nuxt build进行生产构建,nuxt start启动生产服务器
93 0
下一篇
无影云桌面