Webserver笔记

代码随想录的项目


LogStream.h

// 返回data_ char数组的数据末尾地址
const char* end() const { return data_ + sizeof data_; }

Logging.cpp

//定义一个 struct timeval 类型的变量 tv,用于存储当前的时间信息。
//定义一个 time_t 类型的变量 time,用于存储当前的时间戳。
//定义一个字符数组 str_t,用于存储格式化后的时间字符串。
//调用 gettimeofday 函数,获取当前的时间信息,并将其存储在 tv 变量中。
//将 tv 变量中的时间戳赋值给 time 变量。
//调用 localtime 函数,将 time 变量转换为本地时间,并将结果存储在 p_time 变量中。
//调用 strftime 函数,将 p_time 变量中的本地时间格式化为一个字符串,并将其存储在 str_t 数组中。
//将格式化后的时间字符串添加到日志信息中,并将其存储在 stream_ 变量中。
void Logger::Impl::formatTime()
{
    struct timeval tv;
    time_t time;
    char str_t[26] = {0};
    gettimeofday (&tv, NULL);
    time = tv.tv_sec;
    struct tm* p_time = localtime(&time);   
    strftime(str_t, 26, "%Y-%m-%d %H:%M:%S\n", p_time);
    stream_ << str_t;
}

FileUtil.cpp

//stream:一个指向 FILE 类型的指针,表示要设置缓冲区的文件流。
//buf:一个指向字符数组的指针,表示用户提供的缓冲区。
//size:一个 size_t 类型的变量,表示缓冲区的大小。
//当你调用 setbuffer 函数时,文件流将使用用户提供的缓冲区进行 I/O 操作。这样,在进行文件读写时
//数据首先被存储在缓冲区,然后再从缓冲区写入文件或从文件读取到缓冲区。这种方式可以减少实时读写操作的开销,提高性能。
AppendFile::AppendFile(string filename) : fp_(fopen(filename.c_str(), "ae")) {
  // 用户提供缓冲区
  setbuffer(fp_, buffer_, sizeof buffer_);
}

HttpData.cpp

mime这个map在h和cpp中都声明了,感觉cpp中的声明是没有必要的?
std::unordered_map<std::string, std::string> MimeType::mime;  // 16行

Timer这个文件包含两个类

TimerNode类主要维护一个http请求和超时时间,以及是否删除等等。
TimerManager类包含一个优先级队列,用来存放TimerNode对象
// 表示队列存放的数据类型是SPTimerNode,std::deque表示队列的实现容器是deque,TimerCmp代表比较器
std::priority_queue<SPTimerNode, std::deque<SPTimerNode>, TimerCmp> timerNodeQueue;

void TimerNode::update(int timeout) 更新超时时间

 // 这个函数的注释有点看不懂,我感觉就是被删除或者无效了,直接从堆里面删了啊
void TimerManager::handleExpiredEvent() {
  // MutexLockGuard locker(lock);
  while (!timerNodeQueue.empty()) {
    SPTimerNode ptimer_now = timerNodeQueue.top();
    if (ptimer_now->isDeleted())
      timerNodeQueue.pop();
    else if (ptimer_now->isValid() == false)
      timerNodeQueue.pop();
    else
      break;
  }
}

你可能感兴趣的:(Linux,笔记)