评价socket C/S端结构
在得到许多朋友的指点之后,我构造了一个socket的客户端和服务器端的设计方案,请大家评价一下是否合理,谢谢!
由于客户端和服务器端存在多次交互,在设计采用一次连接,多次使用(通知相关子进程进行发送和接收)的方法,主观上认为可能比每次都fork一个子进程的效率要高一些。不知认识是否正确?
相关异常处理还没有详细考虑。
客户端结构:
main()
{
初始化管道环境;
while(1)
{
if(数据准备好)
{
if(相应的发送子进程(或线程)已初始化)
{
往相应的发送管道写入数据;
激活通知(通知子进程从相应管道里读数据);//***?是否利用管道阻塞也可以实现
}
else
{
初始化发送子进程(或线程),包括socket连接;
fork子进程;
if(子进程)
{
while(1)
{
等待主进程通知;
从相应的发送管道读取数据,发送给Server;
}
}
}//(end of else)
}//(end of 数据准备好)
}//(end of while(1))
}
服务器端结构:
main()
{
初始化socket环境;
while(1)
{
if(监听socket accept客户端连接成功)
{
if(相应节点[client]的接收子进程(或线程)已初始化)
{
关闭该节点的接收子进程(或线程);
}
fork子进程;
if(子进程)
{
while(1)
{
等待该socket有数据可读(select实现);
接收数据并进行相关处理;
}
}
}//(end of 监听成功)
}//(end of while(1))
}