- 论坛徽章:
- 0
|
main( int argc , char ** argv )
{
sockid = socket( ... ) ;
bind( sockid ) ;
listen( sockid ) ;
// 下面创建进程池,由该组进程对该 socket id 进行 select 调用,来检测 accept 和 read/write 事件。
for( i = 0 ; i < 10 ; i++ ) {
if ( fork( ) >; 0 ) continue ;
while( 1 ) {
fd_set rfds ;
FD_ZERO( &rfds ) ;
FD_SET( sockid , &rfds ) ;
FD_SET( 其它 socket 句柄,由 accept 调用新产生的 , &rfds ) ;
select( maxfds , &rfds , NULL , NULL , &timeout ) ;
if ( FD_ISSET( sockid , &rfds ) ) {
newsockid = accept( sockid , ... ) ;
break ;
}
if ( FD_ISSET( newsockid , &rfds ) ) {
read/write( newsockid , ... ) ;
break ;
}
}
}
}
我就是有个疑问,这样的结构能够在目前主流的unix操作系统上正常运行吗?性能如何?
如果不行,还有其它方法吗 ?
我是用该模型来解决海量的并发交易处理的。
还有其它什么好的模型吗 ?
wustevens@sina.com |
|