WebServer icon indicating copy to clipboard operation
WebServer copied to clipboard

webbench测试长连接没有问题,测试短连接出现问题

Open YuyiLin-Oliva opened this issue 6 years ago • 8 comments

image 请问短连接的时候速度为0是为什么?

YuyiLin-Oliva avatar Jan 07 '20 08:01 YuyiLin-Oliva

同样遇到这个问题

jiajudu avatar Feb 09 '20 13:02 jiajudu

@YuyiLin-Oliva @jiajudu web server默认没有keep-alive也主动支持长连接,不会断开,webbench的短连接我没做对应的适配,速度为0是因为卡在了webbench这边

linyacool avatar Mar 02 '20 15:03 linyacool

void HttpData::handleConn() { seperateTimer(); uint32_t &events = channel->getEvents(); if (!error_ && connectionState_ == H_CONNECTED) { if (events_ != 0) { int timeout = DEFAULT_EXPIRED_TIME; if (keepAlive_) timeout = DEFAULT_KEEP_ALIVE_TIME; if ((events_ & EPOLLIN) && (events_ & EPOLLOUT)) { events_ = uint32_t(0); events |= EPOLLOUT; } // events |= (EPOLLET | EPOLLONESHOT); events_ |= EPOLLET; loop_->updatePoller(channel_, timeout);

} else if (keepAlive_) {
  events_ |= (EPOLLIN | EPOLLET);
  // events_ |= (EPOLLIN | EPOLLET | EPOLLONESHOT);
  int timeout = DEFAULT_KEEP_ALIVE_TIME;
  loop_->updatePoller(channel_, timeout);
} else {
  // cout << "close normally" << endl;
  // loop_->shutdown(channel_);
  // loop_->runInLoop(bind(&HttpData::handleClose, shared_from_this()));
  events_ |= (EPOLLIN | EPOLLET);
  // events_ |= (EPOLLIN | EPOLLET | EPOLLONESHOT);
  int timeout = (DEFAULT_KEEP_ALIVE_TIME >> 1);
  loop_->updatePoller(channel_, timeout);
}

} else if (!error_ && connectionState_ == H_DISCONNECTING && (events_ & EPOLLOUT)) { events_ = (EPOLLOUT | EPOLLET); } else { // cout << "close with errors" << endl; loop_->runInLoop(bind(&HttpData::handleClose, shared_from_this())); } }

如果要测短连接,

else {
  // cout << "close normally" << endl;
  loop_->shutdown(channel_);
  loop_->runInLoop(bind(&HttpData::handleClose, shared_from_this()));
}

注释的代码拉回来应该就可以了,试一下哈

linyacool avatar Mar 02 '20 15:03 linyacool

@YuyiLin-Oliva @jiajudu

linyacool avatar Mar 02 '20 15:03 linyacool

@linyacool 好的,谢谢解答~

YuyiLin-Oliva avatar Mar 10 '20 05:03 YuyiLin-Oliva

void HttpData::handleConn() { seperateTimer(); uint32_t &events = channel->getEvents(); if (!error_ && connectionState_ == H_CONNECTED) { if (events_ != 0) { int timeout = DEFAULT_EXPIRED_TIME; if (keepAlive_) timeout = DEFAULT_KEEP_ALIVE_TIME; if ((events_ & EPOLLIN) && (events_ & EPOLLOUT)) { events_ = uint32_t(0); events |= EPOLLOUT; } // events |= (EPOLLET | EPOLLONESHOT); events_ |= EPOLLET; loop_->updatePoller(channel_, timeout);

} else if (keepAlive_) {
  events_ |= (EPOLLIN | EPOLLET);
  // events_ |= (EPOLLIN | EPOLLET | EPOLLONESHOT);
  int timeout = DEFAULT_KEEP_ALIVE_TIME;
  loop_->updatePoller(channel_, timeout);
} else {
  // cout << "close normally" << endl;
  // loop_->shutdown(channel_);
  // loop_->runInLoop(bind(&HttpData::handleClose, shared_from_this()));
  events_ |= (EPOLLIN | EPOLLET);
  // events_ |= (EPOLLIN | EPOLLET | EPOLLONESHOT);
  int timeout = (DEFAULT_KEEP_ALIVE_TIME >> 1);
  loop_->updatePoller(channel_, timeout);
}

} else if (!error_ && connectionState_ == H_DISCONNECTING && (events_ & EPOLLOUT)) { events_ = (EPOLLOUT | EPOLLET); } else { // cout << "close with errors" << endl; loop_->runInLoop(bind(&HttpData::handleClose, shared_from_this())); } }

如果要测短连接,

else {
  // cout << "close normally" << endl;
  loop_->shutdown(channel_);
  loop_->runInLoop(bind(&HttpData::handleClose, shared_from_this()));
}

注释的代码拉回来应该就可以了,试一下哈

image 您好我在把注释拉回来后测试短连接时出现段错误,请问这应该怎么解决呢?谢谢

xiekun-96 avatar Jun 21 '21 08:06 xiekun-96

我的长连接只能测1000有结果,大于一千就一直卡在哪没有结果

ppd324 avatar May 30 '22 07:05 ppd324

已收到您的邮件。

YuyiLin-Oliva avatar May 30 '22 07:05 YuyiLin-Oliva