Windows窗体应用程序(非Console)使用libuv实现简单的异步WEB服务器
发布日期:2021-08-14 02:31:32 浏览次数:4 分类:技术文章

本文共 1410 字,大约阅读时间需要 4 分钟。

  libuv是一个很强大的异步处理框架(严格意义上不能叫框架,其实就是一组异步函数库,当然框架这东西有各种各样的定义和理解_^...),最初的的目的是用于NODEJS的异步处理,不过因为它是一个独立的项目,可以独立于NODEJS存在,同时又可以跨平台(类UNIX平台基于LIBEV,WINDOWS平台基于IOCP),所以也有很多人直接把他当做异步处理库来使用,其中.net core 的Kestrel Sever就是基于它构建的 。  

  因为WO对LIBUV理解的也不是很深入,所以就不详细的讲了,只把源码附上来,自己看源码,其中异步的部分是从网上找的TINYWEB的例子,只是和WINDOWS窗体应用程序进行了一次整合而已 。  特此说明  。

  还是遵循老习惯,先运行起来看看操作,至少先知道程序是个什么样子,是做什么用的 。   

  第一步先下载源码 
  下载地址 : 

  下载下来后是一个压缩包,解压缩,目录结构

  

  WinFormLibuv.sln : VS2013的解决方案文件  

  lib : libuv的头文件和Debug以及Release模式下的库文件放在这个目录里 (2016年11月3号)

  WinFomrLibuv 主程序目录   

  打开 WinFormLibuv.sln  并运行程序,出现如下界面

  

   点击启动服务

  

  然后打开浏览器,输入地址 http://localhost:8080

  浏览器返加

  

  再看程序

  

  

程序很简单,就是一个简单的WEB服务器,监听端口8080 . 一旦有WEB请求了,就回复Welcome to tinyweb字样 。

  

因为WINDOWS应用程序有自己的消息(事件)循环 ,

LIBUV也有自己的事件循环,所以主要的点就是怎么融合这两个循环,其实方法很简单(不过官方不推荐这种方式)

while (true){    // 关键点在这里 在WINDOWS的消息循环里,使用UV_RUN_NOWAIT的方式执行LIBUV的事件循环       uv_run(uv_default_loop(), UV_RUN_NOWAIT);    if (GetMessage(&msg, NULL, 0, 0)){        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))        {            TranslateMessage(&msg);            DispatchMessage(&msg);        }    }    else    {        break ;      }}

当然这种方式对于DialogBox创建的模态窗体没用,因为DialogBox创建的模态窗体会有自己的消息循环,只有退出模态窗口才会回到主程序的消息循环 。  

另外有没有其它副作用,也不知 。 :)

----------------------------------------------------------------------------------------------------------

 

 

   

    

  

 

  

  

  

   

 

转载于:https://www.cnblogs.com/jivi/p/6069341.html

转载地址:https://blog.csdn.net/weixin_30703911/article/details/95431669 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:XSS攻击防御篇
下一篇:Spring Boot入门系列八(SpringBoot 整合Mybatis)

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月27日 14时47分27秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

ocdma相干非相干_《Acconeer 60GHz脉冲相干雷达芯片:A111》 2019-04-21
修改表格字体颜色_Excel技巧:Excel如何修改字体颜色 2019-04-21
native react 变颜色 点击_React Native主动更改StackNavigator标头颜色 2019-04-21
prism项目搭建 wpf_WPF MVVM使用prism4.1搭建 2019-04-21
python发微信红包群_用Python实现微信自动化抢红包,再也不用担心抢不到红包了... 2019-04-21
python中func自定义函数_Python函数之自定义函数&作用域&闭包 2019-04-21
wget连接指定端口_端口通不通 telnet wget ssh 2019-04-21
eureka 调用服务_Spring Cloud微服务架构从入门到会用(二)—服务注册中心Eureka... 2019-04-21
easyexcel 工具类_问了个在阿里的同学,他们常用的15款开发者工具! 2019-04-21
mysql统计结果大于0时返回true_mysql表查询练习 2019-04-21
php mysql查询count_php – 如何使这个MySQL Count查询更有效? 2019-04-21
mysql登录15046_ASMCMD命令拷贝文件报错ORA-15046 (转) 2019-04-21
mac 设置mysql登录快捷键_mac安装mysql中设置密码遇到的问题和设置快捷命令打开mysql... 2019-04-21
mysql5.7中文匹配度 match_深度解析MySQL 5.7之中文全文检索 2019-04-21
node mysql 事件循环_nodejs的事件循环简单理解 2019-04-21
java post返回值乱码_java post请求乱码解决方法 2019-04-21
java开源物联网_JetLinks开源物联网平台源码 v1.8.0 2019-04-21
java小猿_猿辅导笔试第二题(Java版)-小猿抽奖 2019-04-21
import java.io后报错_大神求解,IO报错文件名、目录名或卷标语法不正确 2019-04-21
java error discription_动易java script error description缺少对象的完美解决方案 2019-04-21