NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
http_cache.hpp
浏览该文件的文档.
1#ifndef NEFORCE_NETWORK_HTTP_HTTP_CACHE_HPP__
2#define NEFORCE_NETWORK_HTTP_HTTP_CACHE_HPP__
3
8
11NEFORCE_BEGIN_NAMESPACE__
12NEFORCE_BEGIN_HTTP__
13
18
25 string status_message;
27 string body;
28 string etag;
29 datetime cached_at;
30 seconds max_age{60};
31};
32
40class NEFORCE_API response_cache {
41public:
43 size_t max_entries{10000};
45
46 response_cache() = default;
47
53 optional<cached_response> get(const string& key);
54
60 void put(const string& key, const http_response& response, seconds max_age = -1_s);
61
65 void remove(const string& key);
66
70 void cleanup();
71
75 void clear();
76
80 size_t size() const {
82 return entries_.size();
83 }
84
88 static string generate_etag(string_view body);
89
93 static string build_key(const http_method& method, string_view url);
94
95private:
96 struct entry {
97 cached_response response;
98 uint64_t last_access_ms;
99 };
100 mutable shared_mutex mutex_;
102
103 void evict_lru();
104
105 // TODO: Distributed cache backends — Redis/Memcached as shared cache store for multi-instance deployments
106 // TODO: Cache statistics — hit_rate, miss_count, eviction_count, cache_size_bytes for monitoring
107 // TODO: Cache-control directive parsing — honor no-cache, no-store, max-age, s-maxage in addition to If-None-Match
108};
109
116class NEFORCE_API cache_filter final : public http_filter {
117public:
118 bool enabled{true};
119 bool cache_only_get{true};
120
121 cache_filter() = default;
122 explicit cache_filter(response_cache* cache) :
123 cache_(cache) {}
124
125 void set_cache(response_cache* cache) { cache_ = cache; }
126
127 bool pre_filter(http_request& request, http_response& response) override;
128 void post_filter(http_request& request, http_response& response) override;
129 void do_filter(http_request& request, http_response& response) override {}
130 NEFORCE_NODISCARD string name() const override { return "cache_filter"; }
131
132private:
133 response_cache* cache_{nullptr};
134};
135 // HTTP
137
138NEFORCE_END_HTTP__
139NEFORCE_END_NAMESPACE__
140#endif // NEFORCE_NETWORK_HTTP_HTTP_CACHE_HPP__
日期时间类
void do_filter(http_request &request, http_response &response) override
核心过滤方法
string name() const override
获取过滤器名称
bool pre_filter(http_request &request, http_response &response) override
预处理方法
void post_filter(http_request &request, http_response &response) override
后处理方法
static string build_key(const http_method &method, string_view url)
构建缓存键
void put(const string &key, const http_response &response, seconds max_age=-1_s)
存入缓存
seconds default_max_age
默认缓存时间
byte_size max_body_size
最大缓存响应体大小
optional< cached_response > get(const string &key)
获取缓存的响应
static string generate_etag(string_view body)
生成ETag值
void clear()
清空所有缓存
size_t size() const
缓存条目数
void remove(const string &key)
删除缓存条目
size_t max_entries
最大缓存条目数
void cleanup()
清理过期条目
unsigned long uint64_t
64位无符号整数类型
duration< int64_t > seconds
秒持续时间
http_server_response http_response
HTTP响应类型别名
http_server_request http_request
HTTP请求类型别名
basic_string_view< char > string_view
字符字符串视图
http_status
HTTP状态码枚举
HTTP过滤器链实现
共享互斥锁支持
URL统一资源定位符