问题如下:
客户端发送一个100K左右的文件,每次发送1024长度的数据,发送最后一个数据的时候把0xbbbb作为校验位追加到数据结尾然后发送
服务器在text协议的input函数改为检查0xbbbb位置,然后返回 return $pos+2;
我的理解是客户端分多次把数据发送完,gatewayworker也是分包接收然后根据最后的校验位0xbbbb作为包的结束。
可是在发送的时候,客户端断开了,gatewayworker也没有收到完整的数据。所以想请教@walkor,gatewayworker在接受的时候是怎么处理的?怎样解决接收大量数据完整性问题? 谢谢!
协议实现贴一下,应该是写错了,或者客户端发错了
用的是text协议
还有一个问题就是数据量很小的txt可以成功接收到,但是数据量一大就会出现上面的接收问题。
这个是报错信息
SendBufferToWorker fail. May be the send buffer are overflow. See http://wiki.workerman.net/Error2 for detail
SendBufferToWorker fail. The connections between Gateway and BusinessWorker are not ready. See http://wiki.workerman.net/Error3 for detail
worker exit with status 64000
问题解决了,因为不小心误删了input中的
发现自己好蠢,哎!!!
我这几天仔细查看了workerman协议部分的代码,因为删除了上面的代码,所以客户端传输大量数据的时候,$pos会返回false,所以客户端会断开。加上上面代码后,就能循环接受大量数据,直到接收到结尾符。
虽然是自己的疏忽造成的问题,但是通过这个问题,让我更加了解workerman内部的处理。
谢谢@walkor,一下子就知道了协议问题。非常感谢!很好的框架!
不客气