server端**:con-server03.c
複製**
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define hello_world_server_port 6666
#define length_of_listen_queue 20
#define buffer_size 1024
int main(int argc, char **ar**)
if( bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr)))
if ( listen(server_socket, length_of_listen_queue) )
//prepare for forking children
struct sockaddr_in client_addr;
socklen_t length = sizeof(client_addr);
int procnt;
int fds;
fd_set readmask;
int newsock;
int fd = 0;
for (procnt=0; procnt<10; procnt++)
if (fd_isset(server_socket, &readmask))
memset( &client_addr, 0, sizeof(client_addr));
newsock = accept(fd, (struct sockaddr *)&client_addr, &length);
char buffer[buffer_size];
bzero(buffer, buffer_size);
strcpy(buffer,"hello,world! fromserver! ");
int pd;
pd=getpid();
char cpd[10];
sprintf(cpd,"%d",pd);
strcat(buffer,cpd);
strcat(buffer,"\n");
send(newsock,buffer,buffer_size,0);
bzero(buffer,buffer_size);
length = recv(newsock,buffer,buffer_size,0);
if (length < 0)
fprintf(stderr,"got: %s in %d\n",buffer,getpid());
close(newsock);
}///while circle ends
exit(0);///child ends.never goes here
}else
} /// for circle of forking ends
for(;;)
close(server_socket);
return 0; }
複製**
client端**:con-client.c
複製**
#include
#include
#include
#include
#include
#include
#include
#define hello_world_server_port 6666
#define buffer_size 1024
void talk_to_server(char ** ar**)
if( bind(client_socket,(struct sockaddr*)&client_addr,sizeof(client_addr)))
struct sockaddr_in server_addr;
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family = af_inet;
if(inet_aton(ar**[1],&server_addr.sin_addr) == 0)
server_addr.sin_port = htons(hello_world_server_port);
socklen_t server_addr_length = sizeof(server_addr);
if( connect( client_socket, (struct sockaddr*)&server_addr,
server_addr_length) < 0)
char buffer[buffer_size];
bzero(buffer,buffer_size);
int length = recv( client_socket, buffer,buffer_size,0);
if(length < 0)
printf("from server %s :\t%s",ar**[1],buffer);
bzero(buffer,buffer_size);
char name[64];
gethostname(name,sizeof(name));
strcpy(buffer,name);
send(client_socket,buffer,buffer_size,0);
close(client_socket); }
int main(int argc, char **ar**)
int i=0;
for(i=0; i<10000; i++)
return 0; }
複製**
基本上來說,server端的實現方式,就是:
監聽某個port, listen後,開始建立若干的子程序。在父程序裡進入sleep/迴圈;
在子程序裡面,select/accept ,accept後作動作,然後迴圈往復。
好像酒店大堂的門口,開了門納客(監聽);
然後派一批員工(子程序)等在門口(listen/accept),
若有客人來(網路請求),哪個員工(子程序)逮住了就給迎進酒店,領位(服務),然後迴圈往復。
pgpool II的效能缺陷
pgpool ii在執行在 replication mode的時候,效能低下。經過分析,發現無解 這是由pgpool ii的執行方式決定的。pgpool ii 剛開始執行的時候,就會開很多子程序,預設值128。但是,每當客戶端來乙個請求,就會有乙個子程序全權負責,別的子程序不插手。而在replica...
pgpool II的效能缺陷
pgpool ii在執行在 replication mode的時候,效能低下。經過分析,發現無解 這是由pgpool ii的執行方式決定的。pgpool ii 剛開始執行的時候,就會開很多子程序,預設值128。但是,每當客戶端來乙個請求,就會有乙個子程序全權負責,別的子程序不插手。而在replica...
pgpool II的效能缺陷
pgpool ii在執行在 replication mode的時候,效能低下。經過分析,發現無解 這是由pgpool ii的執行方式決定的。pgpool ii 剛開始執行的時候,就會開很多子程序,預設值128。但是,每當客戶端來乙個請求,就會有乙個子程序全權負責,別的子程序不插手。而在replica...