Windows窗体应用程序(非Console)使用libuv实现简单的异步WEB服务器
2016-11-16 16:30
896 查看
libuv是一个很强大的异步处理框架(严格意义上不能叫框架,其实就是一组异步函数库,当然框架这东西有各种各样的定义和理解_^...),最初的的目的是用于NODEJS的异步处理,不过因为它是一个独立的项目,可以独立于NODEJS存在,同时又可以跨平台(类UNIX平台基于LIBEV,WINDOWS平台基于IOCP),所以也有很多人直接把他当做异步处理库来使用,其中.net core 的Kestrel Sever就是基于它构建的 。
因为WO对LIBUV理解的也不是很深入,所以就不详细的讲了,只把源码附上来,自己看源码,其中异步的部分是从网上找的TINYWEB的例子,只是和WINDOWS窗体应用程序进行了一次整合而已 。 特此说明 。
还是遵循老习惯,先运行起来看看操作,至少先知道程序是个什么样子,是做什么用的 。
第一步先下载源码
下载地址 : http://files.cnblogs.com/files/jivi/WinFormLibuvTest.zip
下载下来后是一个压缩包,解压缩,目录结构
WinFormLibuv.sln : VS2013的解决方案文件
lib : libuv的头文件和Debug以及Release模式下的库文件放在这个目录里 (2016年11月3号)
WinFomrLibuv 主程序目录
打开 WinFormLibuv.sln 并运行程序,出现如下界面
点击启动服务
然后打开浏览器,输入地址 http://localhost:8080
浏览器返加
再看程序
程序很简单,就是一个简单的WEB服务器,监听端口8080 . 一旦有WEB请求了,就回复Welcome to tinyweb字样 。
因为WINDOWS应用程序有自己的消息(事件)循环 ,
LIBUV也有自己的事件循环,所以主要的点就是怎么融合这两个循环,其实方法很简单(不过官方不推荐这种方式)
当然这种方式对于DialogBox创建的模态窗体没用,因为DialogBox创建的模态窗体会有自己的消息循环,只有退出模态窗口才会回到主程序的消息循环 。
另外有没有其它副作用,也不知 。 :)
----------------------------------------------------------------------------------------------------------
因为WO对LIBUV理解的也不是很深入,所以就不详细的讲了,只把源码附上来,自己看源码,其中异步的部分是从网上找的TINYWEB的例子,只是和WINDOWS窗体应用程序进行了一次整合而已 。 特此说明 。
还是遵循老习惯,先运行起来看看操作,至少先知道程序是个什么样子,是做什么用的 。
第一步先下载源码
下载地址 : http://files.cnblogs.com/files/jivi/WinFormLibuvTest.zip
下载下来后是一个压缩包,解压缩,目录结构
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创建的模态窗体会有自己的消息循环,只有退出模态窗口才会回到主程序的消息循环 。
另外有没有其它副作用,也不知 。 :)
----------------------------------------------------------------------------------------------------------
相关文章推荐
- 使用HttpListener实现简单Web服务器
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- 使用Python或Node创建简单web服务器和FTP服务器实现文件共享
- 使用Twisted实现一个简单Web服务器
- C#中使用Socket实现简单Web服务器
- 使用HttpListener 实现简单的web服务器
- 通过Socket实现简单web服务器功能(接收页面请求信息)不使用Tomcat!
- (转)使用HttpListener实现简单Web服务器
- 类似于电信弹出广告(push业务),使用ROS与简单web服务器实现
- C#中使用Socket实现简单Web服务器
- C#中使用Socket实现简单Web服务器
- 使用HttpListener实现简单Web服务器
- 关于类似于电信弹出广告(push业务),使用ROS与简单web服务器实现
- 使用NGiNX_HTTP_Push_Module实现简单的服务器推送
- 【转】【简单Web服务器搭建】基于Socket实现的最简单的Web服务器【ASP.NET原理分析】
- 使用NGiNX_HTTP_Push_Module实现简单的服务器推送
- 使用C# socket 简单构架一个web服务器
- C#实现简单WEB服务器
- 使用简单的 5 个步骤设置 Web 服务器集群
- C#实现简单WEB服务器