07 2012 档案

摘要:从上面的两篇完全可以看出,Linux下的io端口事件编程涉及到的内容非常少,而Windows的是多么的复杂。我从事接口这个工作很久了,主要是数据库的接口,以我的工作经验看,简单而且返回稳定明确的接口对于用户编程是非常重要的。用户可以通过自己的情况进行不同的组合,从而达到满足自己的要求,且不浪费任何功能。当然,这对编程者的要求很高,而且接口的提供者要提供非常详细和准确的文档(如果接口设计的简单而明了的话,文档同样不会太难编写)。 阅读全文
posted @ 2012-07-04 09:02 惡盈好謙 阅读(304) 评论(0) 推荐(0) 编辑
摘要:HANDLE WINAPI CreateIoCompletionPort( __in HANDLE FileHandle, __in_opt HANDLE ExistingCompletionPort, __in ULONG_PTR CompletionKey, __in DWORD NumberOfConcurrentThreads);CreateIoCompletionPort:这个函数有两个功能,一个是创建最初的IoComplete对象,这时没有任何IO文件句柄被加入进去。一个是将一个overlap的IO文件,加入到IoComplete对象。下面的代码是创建一个IO completion 阅读全文
posted @ 2012-07-04 09:01 惡盈好謙 阅读(240) 评论(0) 推荐(0) 编辑
摘要:epoll的核心是下面的函数epoll_ctl:用于将待监听的端口和放入(或移除)监听对象中。这个函数两个关键的输入为,1、待监听的接口,2、该接口在io事件发生后,操作系统接口返回给用户对应这个接口的数据。将端口加入监听的{ struct epoll_event epv = {0, {0}}; int op; void *data = malloc(10); epv.data.ptr = data; epv.events = EPOLLIN|EPOLLET; op = EPOLL_CTL_ADD; if(epoll_ctl(epollFd, op, watchfd, &epv) &l 阅读全文
posted @ 2012-07-03 09:36 惡盈好謙 阅读(239) 评论(0) 推荐(0) 编辑
摘要:以tcpip为例。最早知道的服务方式是,为每个tcpip端口都提供一个线程进行服务器。不过在考虑到超过100个以上的连接,将会产生非常多的资源站中。由于数据的特点是在同一时间并不是所有的会话都是活跃的,因此为每个会话提供一个专门服务的线程太过浪费。那么多个工作线程,一个通信处理线程将是很好的选择。已有的tcpip除了select以外,就没有其他更好的办法。经过查找资料,在Windows下,iocp的编程模型,linux下的epoll编程模型,可以很好的监控端口的事件。当然还有其他平台下的编程接口,如kqueue,不过这次实现的主要针对Windows和linux平台,因此不考虑其他平台。为了能够 阅读全文
posted @ 2012-07-02 22:18 惡盈好謙 阅读(146) 评论(0) 推荐(0) 编辑
摘要://////server#include <WinSock2.h>#include <windows.h>#include <stdio.h>#include <stdlib.h>#include <process.h>//该例子代码在并发情况下存在问题,需要对clientRecord进行mutex保护才能保证操作的有效性。#define HOST_PORT 10000#define MAX_BUFF_SIZE 8192typedef struct msg_watch_para_struct msg_watch_para_t;st.. 阅读全文
posted @ 2012-07-02 17:56 惡盈好謙 阅读(598) 评论(0) 推荐(0) 编辑