当前位置: 首页 > news >正文

做暖暖免费网站半路学网站建设难吗

做暖暖免费网站,半路学网站建设难吗,加猛挣钱免费做网站软件,thinkphp做视频网站From: https://www.mobibrw.com/2016/3490 libuv 是重写了下libev#xff0c;封装了windows和unix的差异性。 libuv的特点 非阻塞TCP套接字 socket#xff1f; 非阻塞命名管道 UDP 定时器 子进程 fork? 通过 uv_getaddrinfo实现异步DNS 异步文件系统API uv_fs_* 高分辨率时…From: https://www.mobibrw.com/2016/3490 libuv 是重写了下libev封装了windows和unix的差异性。 libuv的特点 非阻塞TCP套接字 socket 非阻塞命名管道 UDP 定时器 子进程 fork? 通过 uv_getaddrinfo实现异步DNS 异步文件系统API uv_fs_* 高分辨率时间 uv_hrtime 正在运行程序路径查找 uv_exepath 线程池调度 uv_queue_work TTY控制的ANSI转义代码 uv_tty_t 文件系统事件支持 inotify ReadDirectoryChangesW kqueue 马上回支持 uv_fs_event_t 进程间的IPC与套接字共享 uv_write2 事件驱动的风格程序关注/发送事件在事件来临时给出反应。 系统编程中一般都是在处理I/O而IO的主要障碍是网络读取在读取的时候是阻塞掉的。标准的解决方案是使用多线程每一个阻塞的IO操作被分配到一个线程。当线程block处理器调度处理其他线程。 libuv使用了另一个方案异步。操作系统提供了socket的事件即使用socket监听socket事件即可。 libuv简单使用 创建一个loop关闭loop。 #include stdio.h #include stdlib.h #include uv.h int main() { uv_loop_t *loop malloc(sizeof(uv_loop_t)); uv_loop_init(loop); printf(hello, libuv); uv_run(loop, UV_RUN_DEFAULT); uv_loop_close(loop); free(loop); return 0; } 如果只需要一个loop的话调用uv_default_loop就可以了。 tipsNodejs中使用了这个loop作为主loop。 uv_loop_t *loop uv_default_loop(); uv_run(loop, UV_RUN_DEFAULT); uv_loop_close(loop); Error 初始化或同步函数会在执行失败是返回一个负数可以通过uv_strerror、uv_err_name获得这个错误的名字和含义 I/O函数的回调函数会被传递一个nread参数如果nread小于0也代表出现了错误。 Handle Request libuv的工作建立在事件的监听上通常通过handle来实现handle中uv_TYPE_t中的type指定了handle监听的事件。 在uv.h中可以找到handle和request的定义 /* Handle types. */ typedef struct uv_loop_s uv_loop_t; typedef struct uv_handle_s uv_handle_t; typedef struct uv_stream_s uv_stream_t; typedef struct uv_tcp_s uv_tcp_t; typedef struct uv_udp_s uv_udp_t; typedef struct uv_pipe_s uv_pipe_t; typedef struct uv_tty_s uv_tty_t; typedef struct uv_poll_s uv_poll_t; typedef struct uv_timer_s uv_timer_t; typedef struct uv_prepare_s uv_prepare_t; typedef struct uv_check_s uv_check_t; typedef struct uv_idle_s uv_idle_t; typedef struct uv_async_s uv_async_t; typedef struct uv_process_s uv_process_t; typedef struct uv_fs_event_s uv_fs_event_t; typedef struct uv_fs_poll_s uv_fs_poll_t; typedef struct uv_signal_s uv_signal_t; /* Request types. */ typedef struct uv_req_s uv_req_t; typedef struct uv_getaddrinfo_s uv_getaddrinfo_t; typedef struct uv_getnameinfo_s uv_getnameinfo_t; typedef struct uv_shutdown_s uv_shutdown_t; typedef struct uv_write_s uv_write_t; typedef struct uv_connect_s uv_connect_t; typedef struct uv_udp_send_s uv_udp_send_t; typedef struct uv_fs_s uv_fs_t; typedef struct uv_work_s uv_work_t; /* None of the above. */ typedef struct uv_cpu_info_s uv_cpu_info_t; typedef struct uv_interface_address_s uv_interface_address_t; typedef struct uv_dirent_s uv_dirent_t; handle是持久化的对象。在异步操作中相应的handle有许多关联的request。 request是短暂性的通常只维持一个回调的时间一般对应handle的一个IO操作。request用来在初始函数和回调函数中传递上下文。 例如uv_udp_t代表了一个udp的socket每一个socket的写入完成后都有一个uv_udp_send_t被传递。 handle的设置 uv_TYPE_init(uv_loop_t*, uv_TYPE_t); 一个idle handle的使用例子 观察下它的生命周期 #include stdio.h #include uv.h int counter 0; void wait_for(uv_idle_t * handle) { counter; if (counter 10e6) { uv_idle_stop(handle); } } int main() { uv_idle_t idler; uv_idle_init(uv_default_loop(), idler); uv_idle_start(idler, wait_for); printf(Idle......); uv_run(uv_default_loop(), UV_RUN_DEFAULT); uv_loop_close(uv_default_loop()); return 0; } 参数传递 handle和request都有一个data域用来传递信息。uv_loop_t也有一个相似的data域。 文件系统 简单的文件读写是通过uv_fs_*函数族和与之相关的uv_fs_t结构体完成的。 系统的文件操作是阻塞的所以libuv在线程池中调用这些函数最后通知loop。 如果没有指定回调函数文件操作是同步的return libuv error code。 异步在传入回调函数时调用return 0。 获得文件描述符 int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, int mode, uv_fs_cb cb) 关闭文件描述符 int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) 回调函数 void callback(uv_fs_t* req); 还有uv_fs_read uv_fs_write uv_fs_t构成了基本的文件操作 流操作使用uv_stream_t比基本操作方便不少 uv_read_start uv_read_stop uv_write 流操作可以很好的配合pipe使用 pipe相关函数 uv_pipe_init uv_pipe_open uv_close 文件事件 uv_fs_event_t uv_fs_event_init uv_fs_event_start 网络 uv_ip4_addr ip为 0.0.0.0表示绑定所有接口 255.255.255.255是一个广播地址意味着数据将往所有的子网接口发送端口号0表示由操作系统随机分配一个端口 tcp TCP是面向连接的字节流协议因此基于libuv的stream实现 uv_tcp_t 服务器端创建流程 uv_tcp_init 建立tcp句柄 uv_tcp_bind 绑定 uv_listen 建立监听当有新的连接到来时激活调用回调函数 uv_accept 接收链接 使用stream处理数据以及与客户端通信 客户端 客户端比较简单只需要调用uv_tcp_connect udp UDP是不可靠连接libuv基于uv_udp_t和uv_udp_send_t udp的流程与tcp类似 libuv提供了一个异步的DNS解决方案提供了自己的getaddrinfo 配置好主机参数addrinfo后使用uv_getaddrinfo即可 调用uv_interface_addresses获得系统的网络信息 未完待续。 来源http://luohaha.github.io/Chinese-uvbook/source/introduction.html
http://wiki.neutronadmin.com/news/398532/

相关文章:

  • vpsputty做网站线上网课
  • 装修网站怎么建设设计最简单的企业网站
  • 建设网站科目打开百度一下
  • 网站制作要学哪些站内seo和站外seo区别
  • 彩妆做推广的网站厦门市住宅建设办公室网站
  • 怎么做淘宝链接网站建立网站的英语
  • 建设银行无锡分行网站桂林黄页大全桂林本地信息网
  • 做网站利用自己电脑企业seo排名费用报价
  • 如何做网站的注册页面ppt排版布局
  • 手机网站预约表单柳市做网站
  • 机械设备上海网站建设泰州做网站软件
  • 房地产网站建设的目的华为公司网站建设分析评价
  • 网站备案做优惠券自己的网站怎么赚钱
  • 企业移动网站建设哪家外贸网站做的好
  • 那个网站可以做软件出售的微网站如何做横幅链接
  • 同和网站建设重庆建网站有哪些
  • 2017淘宝客网站怎么做丹阳网站建设报价
  • 酒店家具网站源码永州市网站建设
  • 兰州工业发展建设有限公司网站成都企业管理培训课程
  • 网站找人做的他能登管理员吗创业如何进行网站建设
  • 商城建设网站WordPress整篇文章登录可见
  • 诸暨市建设局行业管理网站建立网站对吗
  • 专做网站漏扫的工具开网站备案流程
  • 网站优化新闻wordpress获取分类名
  • 建设网站哪家比较好seo自然优化排名
  • 超级工程网站建设html跳转到另一个html页面
  • 做网站建站广州美容网站建设
  • 个人可以做商城网站吗一般做网站所使用的字体
  • 商务网站内容建设包括西安旅游必去十大景点推荐
  • 做轴承生意的网站软件开发文档资料包括哪些