各位在完成端口模型中是如何解决一个数据包被多个工作者线程收取不同部分的问题呢? 比如一个完整的请求包500字节,但在到达服务器端时因为分包了触发了2次事件,其中一个工作者线程收取了其中的300个字节数据,另一个工作者线程收取了另外的200字节数据,或者是被同一个工作者线程2次收取,则到了服务器端后就变成了2个请求了,除了自己重新组装成一个包外,这种请求各位是如何解决的呢? 我再举个例子:比如游戏客户端发出登陆请求,先发了一个包头,后面再发了一个登陆的相关信息,到了服务器端也是先收到包头,登陆信息又被另一个工作者线程收取,此时程序就很难处理了,需要自己去重新组装。不知道各位是如何解决这中问题的,其实这个问题在WIN平台的其它异步模型、重叠I/O模型中也存在,欢迎大家讨论,分就不给了。
解决方案 »
- 程序启动时占用CPU高
- fontChess.CreateFontW(40,0,0,0,400,FALSE,FALSE,0,OEM_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITC
- 帮我看看这莫名其妙的编译"警告"...
- 请问如何取得窗口中AcitveX控件的IUnknown接口?
- Debug下一切正常,Release下程序异常结束.(sscanf的问题)(在线等待)
- person.cpp(104) : error C2601: 'DelFromFile' : local function definitions are illegal
- 如何实现一个COM对象的实例,两个应用程序共享?
- “记录集”和“行集”有 何区别
- 看过《深入浅出MFC》2/e简体版的朋友请进来看看!!
- 做系统分析员爽吗?!
- 请帮帮我
- 为何用程序写入注册表后,重启机器注册表项就彻底丢失呢
另一方面,对于接收端来说,用WSARecv()进行投递就只投递一次可以了,当接收到数据时,再
调用recv()来接收剩余的内容,当接收完成后,现调用WSARecv()进行下一次数据的投递操作,
这样就不会像楼主说的那样了,也不可能产生楼主那行的问题,要不然,理论上是没办法做到的。
包大于65535就用TransmitFile吧
2、对读请求的包编号,不过编号处理也还是有点烦啊。你不一定先处理到先请求的包。