Skip to content

Commit d1fe096

Browse files
author
ubuntu14
committed
http module in acl has supported gzip transfer in client and server mode.
1 parent 772ff21 commit d1fe096

31 files changed

+875
-199
lines changed

app/wizard/tmpl/http/main_proc.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ int main(int argc, char* argv[])
2222
acl::log::stdout_open(true);
2323

2424
// 监听的地址列表,格式:ip:port1,ip:port2,...
25-
const char* addrs = "127.0.0.1:8888";
25+
const char* addrs = ":8888";
2626
printf("listen on: %s\r\n", addrs);
2727

2828
// 测试时设置该值 > 0 则指定服务器处理客户端连接过程的

app/wizard/tmpl/http/main_threads.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ int main(int argc, char* argv[])
2222
acl::log::stdout_open(true);
2323

2424
// 监听的地址列表,格式:ip:port1,ip:port2,...
25-
const char* addrs = "127.0.0.1:8888";
25+
const char* addrs = ":8888";
2626
printf("listen on: %s\r\n", addrs);
2727

2828
// 测试时设置该值 > 0 则指定服务器处理客户端连接过程的

app/wizard/tmpl/master/main_aio.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ int main(int argc, char* argv[])
2222
acl::log::stdout_open(true);
2323

2424
// 监听的地址列表,格式:ip:port1,ip:port2,...
25-
const char* addrs = "127.0.0.1:8888";
25+
const char* addrs = ":8888";
2626
printf("listen on: %s\r\n", addrs);
2727

2828
// 单独运行方式

app/wizard/tmpl/master/main_proc.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ int main(int argc, char* argv[])
2222
acl::log::stdout_open(true);
2323

2424
// 监听的地址列表,格式:ip:port1,ip:port2,...
25-
const char* addrs = "127.0.0.1:8888";
25+
const char* addrs = ":8888";
2626
printf("listen on: %s\r\n", addrs);
2727

2828
// 测试时设置该值 > 0 则指定服务器处理客户端连接过程的

app/wizard/tmpl/master/main_threads.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ int main(int argc, char* argv[])
2222
acl::log::stdout_open(true);
2323

2424
// 监听的地址列表,格式:ip:port1,ip:port2,...
25-
const char* addrs = "127.0.0.1:8888";
25+
const char* addrs = ":8888";
2626
printf("listen on: %s\r\n", addrs);
2727

2828
// 测试时设置该值 > 0 则指定服务器处理客户端连接过程的

app/wizard/tmpl/master/main_udp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ int main(int argc, char* argv[])
2222
acl::log::stdout_open(true);
2323

2424
// 监听的地址列表,格式:ip:port1,ip:port2,...
25-
const char* addrs = "127.0.0.1:8888";
25+
const char* addrs = ":8888";
2626
printf("bind on: %s\r\n", addrs);
2727

2828
// 测试时设置该值 > 0 则指定服务器处理客户端连接过程的

lib_acl_cpp/changes.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
11
�޸���ʷ�б���
22

33
------------------------------------------------------------------------
4+
346) 2015.8.18
5+
346.1) feature: http_client/http_request ���ڶ�ȡѹ��������ʱ�����Զ�����
6+
��ʱ�������Ϊ 0 ��������Խ���ʹ�ø��Ӷ�
7+
8+
345) 2015.8.17
9+
345.1) http_client gzip ����ѹ���������ͨ��
10+
11+
344) 2015.8.16
12+
344.1) feature: http_client ��֧����Ӧ gzip ѹ�����͵�����
13+
344.2) feature: HttpServletResponse ���е���������������ͳһ�� http_client ����
14+
415
343) 2015.8.15
516
343.1) bugfix: redis_string::incoper �ڲ������� INCR �� INCRBY, DECR �� DECRBY
617
�������

lib_acl_cpp/include/acl_cpp/http/HttpServlet.hpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,35 +20,36 @@ class ACL_CPP_API HttpServlet
2020
virtual ~HttpServlet(void) = 0;
2121

2222
/**
23-
* 设置本地字符集,如果设置了本地字符集,则在接收 HTTP 请求数据时,会自动将请求的
24-
* 字符集转为本地字符集;该函数必须在 doRun 之前调用才有效
23+
* 设置本地字符集,如果设置了本地字符集,则在接收 HTTP 请求数据时,
24+
* 自动将请求的字符集转为本地字符集;该函数必须在 doRun 之前调用才有效
2525
* @param charset {const char*} 本地字符集,如果该指针为空,
2626
* 则清除本地字符集
2727
* @return {HttpServlet&}
2828
*/
2929
HttpServlet& setLocalCharset(const char* charset);
3030

3131
/**
32-
* 设置 HTTP 会话过程的 IO 读写超时时间;该函数必须在 doRun 之前调用才有效
32+
* 设置 HTTP 会话过程 IO 读写超时时间;该函数必须在 doRun 前调用才有效
3333
* @param rw_timeout {int} 读写超时时间(秒)
3434
* @return {HttpServlet&}
3535
*/
3636
HttpServlet& setRwTimeout(int rw_timeout);
3737

3838
/**
39-
* 针对 POST 方法,该方法设置是否需要解析数据体数据,默认为解析,该函数必须在 doRun
40-
* 之前调用才有效;当数据体为数据流或 MIME 格式,即使调用本方法设置了解析数据,也不
41-
* 会对数据体进行解析
39+
* 针对 POST 方法,该方法设置是否需要解析数据体数据,默认为解析,该函
40+
* 数必须在 doRun 之前调用才有效;当数据体为数据流或 MIME 格式,即使
41+
* 调用本方法设置了解析数据,也不会对数据体进行解析
4242
* @param on {bool} 是否需要解析
4343
* @return {HttpServlet&}
4444
*/
4545
HttpServlet& setParseBody(bool on);
4646

4747
/**
48-
* 针对 POST 方法,该方法设置解析数据体的最大长度,如果数据体,该函数必须在 doRun
49-
* 之前调用才有效
50-
* @param length {int} 最大长度限制,如果请求的数据体长度过大,则直接返回
51-
* false,如果该值 <= 0 则内部不限制数据体长度,调用该函数前内部缺省值为 0
48+
* 针对 POST 方法,该方法设置解析数据体的最大长度,如果数据体,该函数
49+
* 必须在 doRun 之前调用才有效
50+
* @param length {int} 最大长度限制,如果请求的数据体长度过大,则直接
51+
* 返回 false,如果该值 <= 0 则内部不限制数据体长度,调用该函数前
52+
* 内部缺省值为 0
5253
* @return {HttpServlet&}
5354
*/
5455
HttpServlet& setParseBodyLimit(int length);

lib_acl_cpp/include/acl_cpp/http/HttpServletRequest.hpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22
#include "acl_cpp/acl_cpp_define.hpp"
33
#include <vector>
4+
#include "acl_cpp/stdlib/string.hpp"
45
#include "acl_cpp/http/http_header.hpp"
56
#include "acl_cpp/http/http_ctype.hpp"
67
#include "acl_cpp/http/http_type.hpp"
@@ -135,10 +136,11 @@ class ACL_CPP_API HttpServletRequest
135136
#endif
136137

137138
/**
138-
* 如果客户端的请求是分段数据,则该函数将获得请求头中的长度起始地址及结束地址
139+
* 如果客户端的请求是分段数据,则该函数将获得请求头中的长度起始地址
140+
* 及结束地址
139141
* @param range_from {long long int&} 偏移起始位置
140142
* @param range_to {long long int&} 偏移结束位置
141-
* @return {bool} 若出错或非分段请求则返回 false,若是分段请求则返回 true
143+
* @return {bool} 若出错或非分段请求则返回false,若是分段请求则返回true
142144
* 注:range_from/range_to 下标从 0 开始
143145
*/
144146
#if defined(_WIN32) || defined(_WIN64)
@@ -278,6 +280,12 @@ class ACL_CPP_API HttpServletRequest
278280
*/
279281
int getKeepAlive(void) const;
280282

283+
/**
284+
* 获得 HTTP 客户端支持的数据压缩算法集合
285+
* @param out {std::vector<string>&} 存储结果集
286+
*/
287+
void getAcceptEncoding(std::vector<string>& out) const;
288+
281289
/*
282290
* 当 HTTP 请求为 POST 方法,通过本函数设置读 HTTP 数据体的
283291
* IO 超时时间值(秒)

lib_acl_cpp/include/acl_cpp/http/HttpServletResponse.hpp

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ class string;
77
class ostream;
88
class socket_stream;
99
class http_header;
10+
class http_client;
1011
class HttpCookie;
1112
class HttpServlet;
13+
class HttpServletRequest;
1214

1315
/**
1416
* 与 HTTP 客户端响应相关的类,该类不应被继承,用户也不需要
@@ -46,20 +48,30 @@ class ACL_CPP_API HttpServletResponse
4648
/**
4749
* 设置与 HTTP 客户端保持联系长连接
4850
* @param on {bool}
51+
* @return {HttpServletResponse&}
4952
*/
5053
HttpServletResponse& setKeepAlive(bool on);
5154

5255
/**
5356
* 设置 HTTP 响应数据体的 Content-Type 字段值,可字段值可以为:
5457
* text/html 或 text/html; charset=utf8 格式
5558
* @param value {const char*} 字段值
59+
* @return {HttpServletResponse&}
5660
*/
5761
HttpServletResponse& setContentType(const char* value);
5862

63+
/**
64+
* 设置 HTTP 响应数据体采用 gzip 压缩格式
65+
* @param gzip {bool} 是否采用 gzip 压缩格式
66+
* @return {HttpServletResponse&}
67+
*/
68+
HttpServletResponse& setContentEncoding(bool gzip);
69+
5970
/**
6071
* 设置 HTTP 响应数据体中字符集,当已经在 setContentType 设置
6172
* 了字符集,则就不必再调用本函数设置字符集
6273
* @param charset {const char*} 响应体数据的字符集
74+
* @return {HttpServletResponse&}
6375
*/
6476
HttpServletResponse& setCharacterEncoding(const char* charset);
6577

@@ -88,8 +100,8 @@ class ACL_CPP_API HttpServletResponse
88100
* 对于分区下载,调用本函数设置数据下载的偏移位置(下标从 0 开始)
89101
* @param from {http_off_t} 数据区间起始偏移位置(下标从 0 开始计算)
90102
* @param to {http_off_t} 数据区间结束位置(该值需小于总数据长度)
91-
* @param total {http_off_t} 总数据长度,当数据源为一个静态文件时该值应
92-
* 等于该文件的总长度大小
103+
* @param total {http_off_t} 总数据长度,当数据源为一个静态文件时该值
104+
* 应等于该文件的总长度大小
93105
* @return {HttpServletResponse&}
94106
*/
95107
#if defined(_WIN32) || defined(_WIN64)
@@ -178,17 +190,18 @@ class ACL_CPP_API HttpServletResponse
178190

179191
/**
180192
* 带格式方式向 HTTP 客户端发送响应数据,内部自动调用
181-
* HttpServletResponse::write(const void*, size_t) 过程,
182-
* 在使用 chunked 方式传输数据时,应该应该最后再调用 write(NULL, 0) 表示数据结束
193+
* HttpServletResponse::write(const void*, size_t) 过程,在使用
194+
* chunked 方式传输数据时,应该应该最后再调用 write(NULL, 0)
195+
* 表示数据结束
183196
* @param fmt {const char*} 变参格式字符串
184197
* @return {int} 成功则返回值 > 0,否则返回 -1
185198
*/
186199
int format(const char* fmt, ...) ACL_CPP_PRINTF(2, 3);
187200

188201
/**
189202
* 带格式方式向 HTTP 客户端发送响应数据,内部自动调用
190-
* HttpServletResponse::write(const string&) 过程,
191-
* 在使用 chunked 方式传输数据时,应该应该最后再调用 write(NULL, 0) 表示数据结束
203+
* HttpServletResponse::write(const string&) 过程,在使用 chunked
204+
* 方式传输数据时,应该应该最后再调用 write(NULL, 0) 表示数据结束
192205
* @param fmt {const char*} 变参格式字符串
193206
* @param ap {va_list} 变参列表
194207
* @return {int} 成功则返回值 > 0,否则返回 -1
@@ -214,8 +227,16 @@ class ACL_CPP_API HttpServletResponse
214227
*/
215228
ostream& getOutputStream(void) const;
216229

230+
/**
231+
* 设置 http 请求对象,该函数目前只应被 HttpServlet 类内部调用
232+
* @param request {HttpServletRequest*}
233+
*/
234+
void setHttpServletRequest(HttpServletRequest* request);
235+
217236
private:
218237
socket_stream& stream_; // 客户端连接流
238+
HttpServletRequest* request_; // http 请求对象
239+
http_client* client_; // http 响应流对象
219240
http_header* header_; // http 响应头
220241
char charset_[32]; // 字符集
221242
char content_type_[32]; // content-type 类型

0 commit comments

Comments
 (0)