搜狗开源框架Workflow网络模型分析

workflow是一个比较轻量化的后端服务框架,支持Linux/Mac/Windows主流平台,其网络模块是框架的核心。在workflow-windows分支上可以看到对windows的IOCP的封装,对于学习windows IOCP网络编程有很好的启发意义。因此,有必要对该网络模块的工作原理进行分析(源码位置:workflow-windows/src/kernel_win/)。

IOCP完成端口主要封装在WinPoller类中,提供网络IO的异步读写,强制唤醒,提前终止等操作。除此之外,WinPoller内部还封装了一个定时器,用于处理延时任务,还支持用户事件转发,用来配合外部任务流的运行。

为进一步了解该网络模块的工作原理,需要理清workflow中的服务框架的组成关系,搞明白一个服务是怎么被拉起的,何时结束的。从官方给出http_server使用教程,可以看到服务启动的整个流程,如下图,显示了WinPoller在workflow网络服务框架中所处的位置,以及一些主要的接口方法。站在Communicator的角度上,可以非常直观地看到对WinPoller的调用过程。

 通过WinPoller的put_io接口,可以投递多种不同类型的异步事件,比如读IO事件,写IO事件,建立连接事件,接受连接事件,延时事件(即sleep事件)以及用户自定义事件(即user事件),并可以通过get_io_result拿到就绪的事件,完成异步操作。

WinPoller可以直接拿来作为作为一个核心部件,实现各种网络框架。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/663306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

类银河恶魔城学习记录1-1 Player状态机的搭建 P28上

对状态机的介绍 什么是状态机?一篇文章就够了 - 知乎 说实话,目前并不能深入理解状态机的奇妙之处(当然,我觉得状态机作为教程的重要组成部分是不得不理解的,所以以下我会对游戏教程内的状态机做一些我认为的解释&am…

加速知识检索:伯克利DeepMind联合研究,RaLMSpec让语言模型服务飞速提升2-7倍!

近年来,随着大型语言模型(LLM)的出现,在多样化的 NLP 任务上取得了令人瞩目的成果。然而,知识密集型任务仍是 NLP 领域中的一项挑战,因为这些任务不仅要求模型要理解和生成自然语言,还要能够访问…

移动机器人激光SLAM导航(四):GMapping SLAM 篇

参考引用 GMapping ROS-Wiki从零开始搭二维激光SLAMGMapping 漫谈小白学移动机器人机器人工匠阿杰wpr_simulation 移动机器人激光SLAM导航(文章链接汇总) 1. GMapping 1.1 FastSLAM 问题分解 概率论相关公式 1. 条件概率公式: p ( x , y ) …

将链表反转

反转链表在解决需要从尾节点开始遍历到头节点的地方很实用,是一种常用的解题技巧。在反转时,我们可以考虑从前向后反转和从后向前反转两种方式。 法一:递归 每次将链表的头节点的下一个节点作为新的头节点,然后对剩余部分调用递归…

深度学习入门笔记(五)前馈网络与反向传播

接着上一节,本节讲解模型自我学习的数学计算过程究竟是怎么样的。 5.1 前馈网络 一个最简单的前馈神经网络如图所示,对于每一个隐藏层,输入对应前一层每一个节点权重乘以节点输出值,输出则是经过激活函数(例如sigmoid函数)计算后的值。 在这样的网络中,输入的数据 x 经…

小白水平理解面试经典题目_数组类Leetcode 412. Fizz Buzz【数学解法】

412 FizzBuzz 小白渣翻译: 给定一个整数 n ,返回一个字符串数组 answer (从 1 开始索引),其中: answer[i] “FizzBuzz” 如果 i 能被 3 和 5 整除。answer[i] “Fizz” 如果 i 能被 3 整除。answer[i]…

8. 实现VLAN间的通信

文章目录 一. 初识VLAN通信1.1. VLAN的概述1.2. Dot1q 终结子接口(单臂路由 )1.3. VLANIF接口 二. 实验专题2.1. 实验1: Dotlq 终结子接口2.1.1. 实验目的2.1.2. 实验拓扑图2.1.3. 实验步骤(1)配置PC机的网络(2)交换机…

八、访存顺序(Memory Ordering)

前言 这部分的内容比较抽象,很多内容我无法理解,都是直接翻译过来的。虽然难,但是不可不看,如果遇到无法理解的都直接跳过,那后面都无法学习下去了。觉得无法理解是因为目前的知识还很欠缺,到后面具备了这…

在PostgreSQL中不开归档?恭喜你!锅你背定了

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

【操作宝典】IntelliJ IDEA新建maven项目详细教程

目录 🌼1. 配置maven环境 🌼2. 创建maven项目 🌼3. 创建maven项目完整示例 a. 导入spring boot环境 b. 修改maven配置 c. 下载jar包 d. 创建Java类 🌼1. 配置maven环境 【安装指南】maven下载、安装与配置详细教程-CSDN博客…

反物质(anti matter)和湮灭反应(Annihilation)浅读

反物质 反物质是正常物质的反状态。当正反物质相遇时,双方就会相互湮灭抵消,发生爆炸并产生巨大能量。 概念 正电子、负质子都是反粒子,它们跟通常所说的电子、质子相比较,电量相等但电性相反。科学家设想在宇宙中可能存在完全由…

【GitHub项目推荐--一个 C++ 实现快速存储的库】【转载】

一个提供可嵌入、持久键值存储以实现快速存储的库。 github地址 https://github.com/facebook/rocksdb 国内镜像 http://www.gitpp.com/ag/rocksdb RocksDB 是一个开源的嵌入式键值存储库,由 Facebook 开发,用于处理大量的数据,特别适合于…

基于SSM的个性化旅游攻略定制系统设计与实现(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的个性化旅游攻略定制系统设计与实现(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&#xf…

故障诊断 | 一文解决,RF随机森林的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,RF随机森林的故障诊断(Matlab) 模型描述 随机森林(Random Forest)是一种集成学习(Ensemble Learning)方法,常用于解决分类和回归问题。它由多个决策树组成,每个决策树都独立地对数据进行训练,并且最终的预测结果是由所有决策…

为什么SSL会握手失败?SSL握手失败原因及解决方案

随着网络安全技术的发展,SSL证书作为网站数据安全的第一道防线,被越来越多的企业选择。SSL证书使用的是SSL协议,而SSL握手是SSL协议当中最重要的一部分。当部署SSL证书时,如果服务器和客户端之间无法建立安全连接,就会…

C++学习Day01之using声明以及using编译指令

目录 一、程序1.1 using声明1.2 using声明与就近原则1.3 using编译指令与就近原则1.4 多个using编译指令 二、分析与总结 一、程序 1.1 using声明 #include<iostream> using namespace std;namespace KingGlory {int sunwukongId 1; } void test01() {//1、using声明u…

由数据插入超长引起的问题——了解GaussDB和openGauss的字符集

前言 故事是这样开始的。我们的小DEMO项目的数据库版本从openGauss 2.1.0升级到了5.0.0版本。升级后进行功能验证的时候&#xff0c;测试同学发现个BUG&#xff0c;原来通过gs_restore导出来的数据再导入时报超长&#xff0c;插入失败了&#xff0c;如下图所示&#xff0c;nva…

2024年第十五届电子商务、管理与经济国际会议(ICEME 2024)即将召开!

2024年第十五届电子商务、管理与经济国际会议(ICEME 2024) 将于2024年7月19-21日在北京召开。本次会议将由北京工业大学主办&#xff0c;中国澳门圣若瑟大学提供学术支持。ICEME 2024旨在为来自世界各地的电子商务、管理与经济的研究人员提供一个展示最新研究成果的高质量交流平…

市场复盘总结 20240202

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 昨日主题投资 连板进级率 6/30 20% 二进三…