本人用select封装了一个socket_server和socket_client
在两个类有方法send,其本质就是一个queue,有send要求,往里面压
当socket线程启动时,在while(true)里负责不断的判断fd_set可读可写状态,当可读,即读出数据,当可写时,即把queue里的数据一次一次的send出去。
–小小分割线–
其测试使用方法为:
test_server.cpp
Thread thread(socketclient);
thread.start();
socketclient.send();//send很多次,数据很多
test_server测试方法也一样
–分割线–
无论从哪一方大量发数据,另一方等待数据,都能正常接收
–再次分割–
当同时从双方大量发送数据时,程序莫名其妙的就会在test.cpp里不切到socket线程里去了,本人估计socket线程被阻塞了,但是跟着,也跟不到阻塞的地方,在封装的socket里,本人打了大量的log,read和write都没有阻塞,select也没有阻塞,实在想不通还有其他什么地方可以阻塞了。
求指导。
在两个类有方法send,其本质就是一个queue,有send要求,往里面压
当socket线程启动时,在while(true)里负责不断的判断fd_set可读可写状态,当可读,即读出数据,当可写时,即把queue里的数据一次一次的send出去。
–小小分割线–
其测试使用方法为:
test_server.cpp
Thread thread(socketclient);
thread.start();
socketclient.send();//send很多次,数据很多
test_server测试方法也一样
–分割线–
无论从哪一方大量发数据,另一方等待数据,都能正常接收
–再次分割–
当同时从双方大量发送数据时,程序莫名其妙的就会在test.cpp里不切到socket线程里去了,本人估计socket线程被阻塞了,但是跟着,也跟不到阻塞的地方,在封装的socket里,本人打了大量的log,read和write都没有阻塞,select也没有阻塞,实在想不通还有其他什么地方可以阻塞了。
求指导。
解决方案
20
恩,确实是,也帮助本人深入理解了