Delphi-IOCP学习笔记<五>===测试IOCP工作线程处理队列顺序
2013-04-20 10:38
465 查看
现在IOCP可以接收到数据了。
>>>>>>>>>其实IOCP的队列是先进先出的,经过测试,看来是我记错了!!!!
>>>>2013年4月20日 16:22:46
>>>>>引用
TCP数据粘包的产生原因在于TCP是一种流协议。在以太网中一个TCP的数据包长度是1500位。其中20位的IP包头,20位的TCP包头,其余的1460都是我们可以发送的数据
>>>>>></article/4473813.html>
我在想如果客户端发送的数据如果比较小,会引起粘包的问题。粘包可以和客户端合订协议,可以解决,需要和客户端一起解决的问题,我想不应该放在IOCP的底层通信来实现!
如果是客户端发送的数据过大呢,客户端是不是会分拆包来进行发送呢!
IOCP的队列是 后进先出的模式,那会不会后面发送的包会被在前面接收到呢?
我需要构思一下,怎么样来做这样的测试。
2013年4月20日 11:03:13
刚刚做了下测试,还是用了之前的例子
1.我首先把工作线程调成了一个
2.服务端单独运行在,GetQueuedCompletionStatus,下断点,先不要执行。
![](http://images.cnitblog.com/blog/1998/201304/20111111-c2ac5c9e0f614962a1a95bb6adc0ab3f.png)
3.单独运行客户端
先创建连接,然后连续发送3次1024字节的字符。
结果
然后回到服务端调试。第一次取出来的字符,是客户端第一次发送过来的字符。。。顺序是对的
难道不是后进先出。有时间向楠楠和fxh求证下。
第二次测试
开两个客户端。同样服务端只开一个工作线程。
先在第一个客户端,发送1024个a,1024个b,1024个c
再第二个客户端,发送1024个1,1024个2,1024个3
回到服务端调试时,发现第一次收到的是a,第二次收到的是1,后面依次收到,b.
可以看出同一个套件字的接收到的顺序是和发送的顺序是一致的,这样的话,我们可以每个套接字分配一个内存。将收到的数据按照套接字写入到这个内存中,就可以了。
>>>>>>>>>其实IOCP的队列是先进先出的,经过测试,看来是我记错了!!!!
>>>>2013年4月20日 16:22:46
>>>>>引用
TCP数据粘包的产生原因在于TCP是一种流协议。在以太网中一个TCP的数据包长度是1500位。其中20位的IP包头,20位的TCP包头,其余的1460都是我们可以发送的数据
>>>>>></article/4473813.html>
我在想如果客户端发送的数据如果比较小,会引起粘包的问题。粘包可以和客户端合订协议,可以解决,需要和客户端一起解决的问题,我想不应该放在IOCP的底层通信来实现!
如果是客户端发送的数据过大呢,客户端是不是会分拆包来进行发送呢!
IOCP的队列是 后进先出的模式,那会不会后面发送的包会被在前面接收到呢?
我需要构思一下,怎么样来做这样的测试。
2013年4月20日 11:03:13
刚刚做了下测试,还是用了之前的例子
1.我首先把工作线程调成了一个
lvCount := 1; //ServerWorkerThread 是工作线程 for I:=1 to lvCount do begin lvWorkerData := AllocMem(SizeOf(TWorkerData)); lvWorkerData.IOCPHandle := lvIOPort; lvWorkerData.WorkerID := i; hThread := CreateThread(nil, 0, @ServerWorkerThread, lvWorkerData,0, dwThreadId); if (hThread = 0) then begin Exit; end; CloseHandle(hThread); end;
2.服务端单独运行在,GetQueuedCompletionStatus,下断点,先不要执行。
![](http://images.cnitblog.com/blog/1998/201304/20111111-c2ac5c9e0f614962a1a95bb6adc0ab3f.png)
3.单独运行客户端
先创建连接,然后连续发送3次1024字节的字符。
结果
然后回到服务端调试。第一次取出来的字符,是客户端第一次发送过来的字符。。。顺序是对的
难道不是后进先出。有时间向楠楠和fxh求证下。
第二次测试
开两个客户端。同样服务端只开一个工作线程。
先在第一个客户端,发送1024个a,1024个b,1024个c
再第二个客户端,发送1024个1,1024个2,1024个3
回到服务端调试时,发现第一次收到的是a,第二次收到的是1,后面依次收到,b.
可以看出同一个套件字的接收到的顺序是和发送的顺序是一致的,这样的话,我们可以每个套接字分配一个内存。将收到的数据按照套接字写入到这个内存中,就可以了。
相关文章推荐
- Delphi-IOCP学习笔记<三>====工作线程和Listener
- Delphi-IOCP学习笔记<九>======性能测试和IOCP源码下载<5000个连接数>
- Delphi-IOCP学习笔记<九>======性能测试和IOCP源码下载<5000个连接数>
- Delphi-IOCP学习笔记<四>===小结<IOCP的简单例子>
- Delphi-IOCP学习笔记<二>====IOCP基本函数介绍和理解
- Delphi-IOCP学习笔记<一>====从零开始学习IOCP
- Delphi-IOCP学习笔记<八>=======服务端的数据发送和JSonStreamObject的编码器
- RT-Thread 学习笔记(十二)--- 开启基于RTGUI的LCD显示功能(2)<编译测试>
- <<Linux内核完全剖析 --基于0.12内核>>学习笔记 第4章 80x86保护模式及其编程 4.6 中断和异常处理
- java学习笔记<五>instanceof运算符
- 多线程 学习笔记<1> 线程建立
- RT-Thread 学习笔记(十三)--- 开启基于RTGUI的LCD显示功能(3)<触屏屏驱动移植和测试>
- 多线程 学习笔记<4> 进程与线程的区别联系
- Delphi-IOCP研究笔记<七>===接收数据的解码器(Decoder)和数据处理
- SQL 学习笔记<五> 数据更新
- Delphi-IOCP 学习笔记<六>=====IO内存池和扩展套接字(ClientContext)
- java 从零开始,学习笔记之基础入门<线程及实例分析>(十九)
- <Test-Driven Development with Python>学习笔记 第一部分 测试驱动开发基础
- Java学习笔记<8>线程
- power desinger 学习笔记<五>