利用nginx的事件模型开发自己的应用
来源:互联网 发布:eosremote软件下载 编辑:程序博客网 时间:2024/05/29 15:48
Nginx拥有大名鼎鼎的事件模型,在初始化介绍后循环调用ngx_process_events_and_timers(cycle),来处理各种事件。并且其高效的时间模块,能很方便地控制各event的超时等。
这样的一套机制,不仅适用于http,mail等应用,甚至我们可以不管nginx里的网络功能,利用这套event机制,开发一个本地的小应用。这样做很好玩,也可以更好的学习nginx的事件、时间模型。
这里以一个简单的游戏服务器为例。
首先看一下nginx作为服务器,其网络功能的实现情况。Init_cycle()Parse_conf();//解析配置文件,找到所有的listen ip:portListen_fd = listen()//打开所有的监听Listen_fd 分配一个connection结构R/W事件则依附于connection结构,listen_fd的R->handler = ngx_event_accept()
这些构建过程可详细参考http、listen等指令的set()函数。这些listen_connection就是所有事件的起源,接受连接后,ngx_event_accept()会得到con_fd,并分配给它一个connection结构,并初始化之。ngx_event_accept()的最后会调用listen->handler,以确保用于不同功能的con_fd得到各自相应的初始化。
其中最重要的就是设置con_fd的R/W->handler,如http功能的R->handler= ngx_http_init_request()。当该con_fd接收到数据时,就会初始化http流程。
/* nginx.conf */……Event {……}http {……}Tplay {Server { Listen ip:port; Game exnumber; ……}Server { Listem *:port; Game rld; ……}}
其中tplay,listen的set()函数,参考http的来写就行了,最后tplay_listen->handler()作为tplay_connect_fd的最后初始化,可以根据需要来写。
比如以这里的exnumber游戏为例(就是猜数,每次server返回偏大或偏小,直到猜对):最终设置con_fd的R->handler()为ngx_tplay_exnumber_judge(),来判断所猜数字偏大还是偏小,并且可以为R->ev->timer设置超时值,提高游戏的挑战性。
- 利用nginx的事件模型开发自己的应用
- 事件驱动的应用开发模型
- nginx的事件驱动模型
- 分布式应用中基于事件驱动的应用开发模型
- 自己开发的应用
- nginx服务器的事件驱动模型
- 深度学习-CAFFE利用CIFAR10网络模型训练自己的图像数据获得模型-4应用生成模型进行预测
- Java事件模型学习(2)--实现自己的事件
- nginx采用epoll的事件模型,为何效率高
- nginx中事件模型中instance变量的处理细节
- nginx采用epoll的事件模型,为何效率高
- nginx中事件模型中instance变量的处理细节
- 利用Geneva开发SOA的安全模型
- 利用DirectShow开发自己的Filter
- 利用DirectShow开发自己的Filter
- 利用 DirectShow 开发自己的 Filter
- 利用DirectShow开发自己的Filter
- 利用 DirectShow 开发自己的 Filter
- 导出Excel
- Junit3.8 初学
- 规模小运作成本高 短期理财基金谋转型
- 孙永杰:HTC见证奇迹的时刻到了?
- 内部类的隐式使用this逸出问题
- 利用nginx的事件模型开发自己的应用
- 牛顿迭代法快速寻找平方根
- Session的默认保存路径
- Java 网络爬虫获取网页源代码原理及实现
- vmare 9.0 虚拟机硬盘扩展空间
- 解读 Q_D, Q_Q 指针
- 文档型数据库CouchBase应用实践
- linux设备:cdev和kobj_map
- 爬虫系列四:为你的爬虫加速