找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3150|回复: 2

关于前摄器异步写的问题

[复制链接]
发表于 2008-3-5 10:57:04 | 显示全部楼层 |阅读模式
我用前摄器模式写一个支持下载服务器的demo,调式的时候发现服务器返回not enough space的代码,但是数据仍然传给了客户端,
以下是我的代码:

//从segment中获取数据,可能通过startPoint和data_count截取部分数据
   writeMB =SMovieInfo::instance()->getSegmentContent(data_bulkID,data_segmentID,data_startPoint,data_count);
   ACE_Message_Block *head;
   ACE_OutputCDR outCDR(ACE_CDR::MAX_ALIGNMENT+8);
   outCDR<<ACE_OutputCDR::from_boolean(ACE_CDR_BYTE_ORDER);
   if (writeMB == NULL)
   {   
    data_count = 0;
   }
   
   outCDR<<ACE_CDR::ULong(data_count);
    //用两个ACE_Message_Block串联
   if (writeMB!=NULL)
   {
    head = new ACE_Message_Block((outCDR.begin())->rd_ptr(),(outCDR.begin())->total_length());
    head->wr_ptr((outCDR.begin())->total_length());
    head->cont(writeMB);
   }
   
   unsigned long resultsize = head->total_length();
   if (this->writer_.writev(*head,resultsize)!=0)
   {
    ACE_ERROR((LM_ERROR,ACE_TEXT("%p\n"),ACE_TEXT("starting write")));
   }

客户端请求的数据包大小是823136+8,服务器的两个ace_message_block包大小一个是8,一个是823136,发送出去产生 starting write:no enough space的错误
请问我该如何处理,是否需要将异步write每次写的数据减小,而不是这样一次发送800KB的数据呢。
初学者,请大家赐教,谢谢
发表于 2008-3-5 22:13:17 | 显示全部楼层
不太好分析。
1、是否打开了太多的异步投递。ACE默认的那个数字,是有问题的。改小点。
2、仔细分析一下代码,查看一下内存变化,看看是否有错误。
 楼主| 发表于 2008-3-6 15:09:06 | 显示全部楼层
1、是否打开了太多的异步投递。ACE默认的那个数字,是有问题的。改小点。
版主你说的这个参数是在哪里更改的。

问题解决了,但是还是不知道为什么,将writev调用通过类成员writeFlag_ 来调用两次异步写,先写8个字节的头,然后再写二进制内容的MessageBlock,就不会出现
上面说的错误。没有通过自己控制wr_ptr()指针使得每次异步写的包内容小于1500。

版主说的打开了太多的异步投递,还没有做压力测试,暂时用一个客户端连接试试功能性。

感谢版主的建议,谢谢
void Download_Service::handle_write_stream(const ACE_Asynch_Write_Stream::Result &result)
{
if (writeFlag_ == 1)
{
  writeFlag_ = 2; //如何判断写操作正确,如果分组写,不正确就立刻返回而不进行接下来的操作
  result.message_block().release();
  if (this->writer_.write(*writeMB,writeMB->total_length())!=0)
  {
   ACE_ERROR((LM_ERROR,ACE_TEXT("%p\n"),ACE_TEXT("starting write")));
  }
}
else
{
  result.message_block().release();
  delete this;
  return;
}

}
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-25 04:01 , Processed in 0.014046 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表