Skip to content

Commit 76202bd

Browse files
authored
Optimize code (swoole#4295)
* optimize code[2] * optimize code[3] * Refactor websocket, optimize code style * fix tests * fix core-tests * optimize code * Refactor http2, optimize code style * Optimize
1 parent 7c98467 commit 76202bd

24 files changed

+681
-564
lines changed

core-tests/include/httplib_client.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ struct Response {
396396
std::function<void()> content_provider_resource_releaser_;
397397
};
398398

399-
struct WebSocketFrame : public swWebSocket_frame {
399+
struct WebSocketFrame : public swoole::websocket::Frame {
400400
WebSocketFrame() = default;
401401
~WebSocketFrame() {
402402
if (payload) {
@@ -544,10 +544,10 @@ class Client {
544544
std::shared_ptr<Response> Put(const char *path, const Headers &headers, const Params &params);
545545

546546
// websocket
547-
inline bool Push(const std::string &data, int opcode = WEBSOCKET_OPCODE_TEXT) {
548-
return Push(data.c_str(), data.length(), WEBSOCKET_OPCODE_TEXT);
547+
inline bool Push(const std::string &data, int opcode = swoole::websocket::OPCODE_TEXT) {
548+
return Push(data.c_str(), data.length(), swoole::websocket::OPCODE_TEXT);
549549
}
550-
bool Push(const char *data, size_t length, int opcode = WEBSOCKET_OPCODE_TEXT);
550+
bool Push(const char *data, size_t length, int opcode = swoole::websocket::OPCODE_TEXT);
551551
std::shared_ptr<WebSocketFrame> Recv();
552552

553553
std::shared_ptr<Response> Patch(const char *path, const std::string &body, const char *content_type);

core-tests/src/_lib/http.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#include "httplib_client.h"
33
#include "swoole_http.h"
44

5+
namespace websocket = swoole::websocket;
6+
57
namespace httplib {
68

79
bool Client::Upgrade(const char *_path, Headers &_headers) {
@@ -29,7 +31,7 @@ bool Client::Push(const char *data, size_t length, int opcode) {
2931
buffer.size = sizeof(buf);
3032
buffer.str = buf;
3133

32-
swWebSocket_encode(&buffer, data, length, opcode, SW_WEBSOCKET_FLAG_FIN | SW_WEBSOCKET_FLAG_ENCODE_HEADER_ONLY);
34+
websocket::encode(&buffer, data, length, opcode, websocket::FLAG_FIN | websocket::FLAG_ENCODE_HEADER_ONLY);
3335
strm.write(buffer.str, buffer.length);
3436
strm.write(data, length);
3537
return true;
@@ -41,7 +43,7 @@ std::shared_ptr<WebSocketFrame> Client::Recv() {
4143
auto retval = process_socket(socket_, [&](Stream &strm) {
4244
swProtocol proto = {};
4345
proto.package_length_size = SW_WEBSOCKET_HEADER_LEN;
44-
proto.get_package_length = swWebSocket_get_package_length;
46+
proto.get_package_length = websocket::get_package_length;
4547
proto.package_max_length = SW_INPUT_BUFFER_SIZE;
4648

4749
char buf[1024];
@@ -83,7 +85,7 @@ std::shared_ptr<WebSocketFrame> Client::Recv() {
8385
read_bytes += n_read;
8486
}
8587

86-
return swWebSocket_decode(msg.get(), data, packet_len);
88+
return websocket::decode(msg.get(), data, packet_len);
8789
});
8890

8991
return retval ? msg : nullptr;

core-tests/src/server/http.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,11 @@ static void test_run_server(function<void(swServer *)> fn) {
117117
SessionId session_id = req->info.fd;
118118
auto conn = serv->get_connection_by_session_id(session_id);
119119

120-
if (conn->websocket_status == WEBSOCKET_STATUS_ACTIVE) {
120+
if (conn->websocket_status == swoole::websocket::STATUS_ACTIVE) {
121121
sw_tg_buffer()->clear();
122122
std::string resp = "Swoole: " + string(req->data, req->info.len);
123-
swWebSocket_encode(
124-
sw_tg_buffer(), resp.c_str(), resp.length(), WEBSOCKET_OPCODE_TEXT, SW_WEBSOCKET_FLAG_FIN);
123+
swoole::websocket::encode(
124+
sw_tg_buffer(), resp.c_str(), resp.length(), swoole::websocket::OPCODE_TEXT, swoole::websocket::FLAG_FIN);
125125
serv->send(session_id, sw_tg_buffer()->str, sw_tg_buffer()->length);
126126
return SW_OK;
127127
}
@@ -151,7 +151,7 @@ static void test_run_server(function<void(swServer *)> fn) {
151151

152152
ctx.response(SW_HTTP_SWITCHING_PROTOCOLS);
153153

154-
conn->websocket_status = WEBSOCKET_STATUS_ACTIVE;
154+
conn->websocket_status = swoole::websocket::STATUS_ACTIVE;
155155

156156
return SW_OK;
157157
}

ext-src/swoole_http2_client_coro.cc

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
using namespace swoole;
3232
using swoole::coroutine::Socket;
3333

34+
namespace Http2 = swoole::http2;
35+
3436
static zend_class_entry *swoole_http2_client_coro_ce;
3537
static zend_object_handlers swoole_http2_client_coro_handlers;
3638

@@ -43,7 +45,9 @@ static zend_object_handlers swoole_http2_request_handlers;
4345
static zend_class_entry *swoole_http2_response_ce;
4446
static zend_object_handlers swoole_http2_response_handlers;
4547

46-
namespace swoole { namespace coroutine { namespace http2 {
48+
namespace swoole {
49+
namespace coroutine {
50+
namespace http2 {
4751

4852
struct Stream {
4953
uint32_t stream_id;
@@ -76,8 +80,8 @@ class Client {
7680
uint32_t stream_id = 0; // the next send stream id
7781
uint32_t last_stream_id = 0; // the last received stream id
7882

79-
swHttp2_settings local_settings = {};
80-
swHttp2_settings remote_settings = {};
83+
Http2::Settings local_settings = {};
84+
Http2::Settings remote_settings = {};
8185

8286
std::unordered_map<uint32_t, Stream *> streams;
8387

@@ -91,7 +95,7 @@ class Client {
9195
open_ssl = _ssl;
9296
_zobject = *__zobject;
9397
zobject = &_zobject;
94-
swHttp2_init_settings(&local_settings);
98+
Http2::init_settings(&local_settings);
9599
}
96100

97101
inline Stream *get_stream(uint32_t stream_id) {
@@ -188,7 +192,9 @@ class Client {
188192
}
189193
};
190194

191-
}}}
195+
} // namespace http2
196+
} // namespace coroutine
197+
} // namespace swoole
192198

193199
using swoole::coroutine::http2::Client;
194200
using swoole::coroutine::http2::Stream;
@@ -417,7 +423,7 @@ bool Client::connect() {
417423
client->protocol.package_length_size = SW_HTTP2_FRAME_HEADER_SIZE;
418424
client->protocol.package_length_offset = 0;
419425
client->protocol.package_body_offset = 0;
420-
client->protocol.get_package_length = swHttp2_get_frame_length;
426+
client->protocol.get_package_length = Http2::get_frame_length;
421427

422428
apply_setting(
423429
sw_zend_read_property_ex(swoole_http2_client_coro_ce, zobject, SW_ZSTR_KNOWN(SW_ZEND_STR_SETTING), 0));
@@ -430,7 +436,7 @@ bool Client::connect() {
430436

431437
stream_id = 1;
432438
// [init]: we must set default value, server is not always send all the settings
433-
swHttp2_init_settings(&remote_settings);
439+
Http2::init_settings(&remote_settings);
434440

435441
int ret = nghttp2_hd_inflate_new2(&inflater, php_nghttp2_mem());
436442
if (ret != 0) {
@@ -493,7 +499,7 @@ enum swReturn_code Client::parse_frame(zval *return_value, bool pipeline_read) {
493499
uint8_t type = buf[3];
494500
uint8_t flags = buf[4];
495501
uint32_t stream_id = ntohl((*(int *) (buf + 5))) & 0x7fffffff;
496-
ssize_t length = swHttp2_get_length(buf);
502+
ssize_t length = Http2::get_length(buf);
497503
buf += SW_HTTP2_FRAME_HEADER_SIZE;
498504

499505
char frame[SW_HTTP2_FRAME_HEADER_SIZE + SW_HTTP2_FRAME_PING_PAYLOAD_SIZE];
@@ -563,7 +569,7 @@ enum swReturn_code Client::parse_frame(zval *return_value, bool pipeline_read) {
563569
length -= sizeof(id) + sizeof(value);
564570
}
565571

566-
swHttp2_set_frame_header(frame, SW_HTTP2_TYPE_SETTINGS, 0, SW_HTTP2_FLAG_ACK, stream_id);
572+
Http2::set_frame_header(frame, SW_HTTP2_TYPE_SETTINGS, 0, SW_HTTP2_FLAG_ACK, stream_id);
567573
if (!send(frame, SW_HTTP2_FRAME_HEADER_SIZE)) {
568574
return SW_ERROR;
569575
}
@@ -585,7 +591,7 @@ enum swReturn_code Client::parse_frame(zval *return_value, bool pipeline_read) {
585591
case SW_HTTP2_TYPE_PING: {
586592
swHttp2FrameTraceLog(recv, "ping");
587593
if (!(flags & SW_HTTP2_FLAG_ACK)) {
588-
swHttp2_set_frame_header(
594+
Http2::set_frame_header(
589595
frame, SW_HTTP2_TYPE_PING, SW_HTTP2_FRAME_PING_PAYLOAD_SIZE, SW_HTTP2_FLAG_ACK, stream_id);
590596
memcpy(
591597
frame + SW_HTTP2_FRAME_HEADER_SIZE, buf + SW_HTTP2_FRAME_HEADER_SIZE, SW_HTTP2_FRAME_PING_PAYLOAD_SIZE);
@@ -838,18 +844,18 @@ bool Client::send_window_update(int stream_id, uint32_t size) {
838844
char frame[SW_HTTP2_FRAME_HEADER_SIZE + SW_HTTP2_WINDOW_UPDATE_SIZE];
839845
swTraceLog(SW_TRACE_HTTP2, "[" SW_ECHO_YELLOW "] stream_id=%d, size=%d", "WINDOW_UPDATE", stream_id, size);
840846
*(uint32_t *) ((char *) frame + SW_HTTP2_FRAME_HEADER_SIZE) = htonl(size);
841-
swHttp2_set_frame_header(frame, SW_HTTP2_TYPE_WINDOW_UPDATE, SW_HTTP2_WINDOW_UPDATE_SIZE, 0, stream_id);
847+
Http2::set_frame_header(frame, SW_HTTP2_TYPE_WINDOW_UPDATE, SW_HTTP2_WINDOW_UPDATE_SIZE, 0, stream_id);
842848
return send(frame, SW_HTTP2_FRAME_HEADER_SIZE + SW_HTTP2_WINDOW_UPDATE_SIZE);
843849
}
844850

845851
bool Client::send_setting() {
846-
swHttp2_settings *settings = &local_settings;
852+
Http2::Settings *settings = &local_settings;
847853
uint16_t id = 0;
848854
uint32_t value = 0;
849855

850856
char frame[SW_HTTP2_FRAME_HEADER_SIZE + 18];
851857
memset(frame, 0, sizeof(frame));
852-
swHttp2_set_frame_header(frame, SW_HTTP2_TYPE_SETTINGS, 18, 0, 0);
858+
Http2::set_frame_header(frame, SW_HTTP2_TYPE_SETTINGS, 18, 0, 0);
853859

854860
char *p = frame + SW_HTTP2_FRAME_HEADER_SIZE;
855861
/**
@@ -880,7 +886,7 @@ bool Client::send_setting() {
880886
memcpy(p, &value, sizeof(value));
881887
p += 4;
882888

883-
swTraceLog(SW_TRACE_HTTP2, "[" SW_ECHO_GREEN "]\t[length=%d]", swHttp2_get_type(SW_HTTP2_TYPE_SETTINGS), 18);
889+
swTraceLog(SW_TRACE_HTTP2, "[" SW_ECHO_GREEN "]\t[length=%d]", Http2::get_type(SW_HTTP2_TYPE_SETTINGS), 18);
884890
return send(frame, SW_HTTP2_FRAME_HEADER_SIZE + 18);
885891
}
886892

@@ -1110,7 +1116,7 @@ Stream *Client::create_stream(uint32_t stream_id, uint8_t flags) {
11101116

11111117
bool Client::send_ping_frame() {
11121118
char frame[SW_HTTP2_FRAME_HEADER_SIZE + SW_HTTP2_FRAME_PING_PAYLOAD_SIZE];
1113-
swHttp2_set_frame_header(frame, SW_HTTP2_TYPE_PING, SW_HTTP2_FRAME_PING_PAYLOAD_SIZE, SW_HTTP2_FLAG_NONE, 0);
1119+
Http2::set_frame_header(frame, SW_HTTP2_TYPE_PING, SW_HTTP2_FRAME_PING_PAYLOAD_SIZE, SW_HTTP2_FLAG_NONE, 0);
11141120
return send(frame, SW_HTTP2_FRAME_HEADER_SIZE + SW_HTTP2_FRAME_PING_PAYLOAD_SIZE);
11151121
}
11161122

@@ -1126,7 +1132,7 @@ bool Client::send_data(uint32_t stream_id, const char *p, size_t len, int flag)
11261132
send_len = len;
11271133
send_flag = flag;
11281134
}
1129-
swHttp2_set_frame_header(header, SW_HTTP2_TYPE_DATA, send_len, send_flag, stream_id);
1135+
Http2::set_frame_header(header, SW_HTTP2_TYPE_DATA, send_len, send_flag, stream_id);
11301136
if (!send(header, SW_HTTP2_FRAME_HEADER_SIZE)) {
11311137
return false;
11321138
}
@@ -1180,11 +1186,11 @@ uint32_t Client::send_request(zval *zrequest) {
11801186
flags |= SW_HTTP2_FLAG_END_STREAM;
11811187
}
11821188

1183-
swHttp2_set_frame_header(buffer, SW_HTTP2_TYPE_HEADERS, bytes, flags, stream->stream_id);
1189+
Http2::set_frame_header(buffer, SW_HTTP2_TYPE_HEADERS, bytes, flags, stream->stream_id);
11841190

11851191
swTraceLog(SW_TRACE_HTTP2,
11861192
"[" SW_ECHO_GREEN ", STREAM#%d] length=%zd",
1187-
swHttp2_get_type(SW_HTTP2_TYPE_HEADERS),
1193+
Http2::get_type(SW_HTTP2_TYPE_HEADERS),
11881194
stream->stream_id,
11891195
bytes);
11901196
if (!send(buffer, SW_HTTP2_FRAME_HEADER_SIZE + bytes)) {
@@ -1215,7 +1221,7 @@ uint32_t Client::send_request(zval *zrequest) {
12151221

12161222
swTraceLog(SW_TRACE_HTTP2,
12171223
"[" SW_ECHO_GREEN ", END, STREAM#%d] length=%zu",
1218-
swHttp2_get_type(SW_HTTP2_TYPE_DATA),
1224+
Http2::get_type(SW_HTTP2_TYPE_DATA),
12191225
stream->stream_id,
12201226
len);
12211227

@@ -1253,10 +1259,10 @@ bool Client::write_data(uint32_t stream_id, zval *zdata, bool end) {
12531259
php_swoole_error(E_WARNING, "http_build_query failed");
12541260
return false;
12551261
}
1256-
swHttp2_set_frame_header(buffer, SW_HTTP2_TYPE_DATA, len, flag, stream_id);
1262+
Http2::set_frame_header(buffer, SW_HTTP2_TYPE_DATA, len, flag, stream_id);
12571263
swTraceLog(SW_TRACE_HTTP2,
12581264
"[" SW_ECHO_GREEN ",%s STREAM#%d] length=%zu",
1259-
swHttp2_get_type(SW_HTTP2_TYPE_DATA),
1265+
Http2::get_type(SW_HTTP2_TYPE_DATA),
12601266
end ? " END," : "",
12611267
stream_id,
12621268
len);
@@ -1267,10 +1273,10 @@ bool Client::write_data(uint32_t stream_id, zval *zdata, bool end) {
12671273
smart_str_free(&formstr_s);
12681274
} else {
12691275
zend::String data(zdata);
1270-
swHttp2_set_frame_header(buffer, SW_HTTP2_TYPE_DATA, data.len(), flag, stream_id);
1276+
Http2::set_frame_header(buffer, SW_HTTP2_TYPE_DATA, data.len(), flag, stream_id);
12711277
swTraceLog(SW_TRACE_HTTP2,
12721278
"[" SW_ECHO_GREEN ",%s STREAM#%d] length=%zu",
1273-
swHttp2_get_type(SW_HTTP2_TYPE_DATA),
1279+
Http2::get_type(SW_HTTP2_TYPE_DATA),
12741280
end ? " END," : "",
12751281
stream_id,
12761282
data.len());
@@ -1290,15 +1296,15 @@ bool Client::send_goaway_frame(zend_long error_code, const char *debug_data, siz
12901296
size_t length = SW_HTTP2_FRAME_HEADER_SIZE + SW_HTTP2_GOAWAY_SIZE + debug_data_len;
12911297
char *frame = (char *) ecalloc(1, length);
12921298
bool ret;
1293-
swHttp2_set_frame_header(frame, SW_HTTP2_TYPE_GOAWAY, SW_HTTP2_GOAWAY_SIZE + debug_data_len, error_code, 0);
1299+
Http2::set_frame_header(frame, SW_HTTP2_TYPE_GOAWAY, SW_HTTP2_GOAWAY_SIZE + debug_data_len, error_code, 0);
12941300
*(uint32_t *) (frame + SW_HTTP2_FRAME_HEADER_SIZE) = htonl(last_stream_id);
12951301
*(uint32_t *) (frame + SW_HTTP2_FRAME_HEADER_SIZE + 4) = htonl(error_code);
12961302
if (debug_data_len > 0) {
12971303
memcpy(frame + SW_HTTP2_FRAME_HEADER_SIZE + SW_HTTP2_GOAWAY_SIZE, debug_data, debug_data_len);
12981304
}
12991305
swTraceLog(SW_TRACE_HTTP2,
13001306
"[" SW_ECHO_GREEN "] Send: last-sid=%u, error-code=%ld",
1301-
swHttp2_get_type(SW_HTTP2_TYPE_GOAWAY),
1307+
Http2::get_type(SW_HTTP2_TYPE_GOAWAY),
13021308
last_stream_id,
13031309
error_code);
13041310
ret = send(frame, length);
@@ -1371,7 +1377,7 @@ static PHP_METHOD(swoole_http2_client_coro, connect) {
13711377
RETURN_BOOL(h2c->connect());
13721378
}
13731379

1374-
static sw_inline void http2_settings_to_array(swHttp2_settings *settings, zval *zarray) {
1380+
static sw_inline void http2_settings_to_array(Http2::Settings *settings, zval *zarray) {
13751381
array_init(zarray);
13761382
add_assoc_long_ex(zarray, ZEND_STRL("header_table_size"), settings->header_table_size);
13771383
add_assoc_long_ex(zarray, ZEND_STRL("window_size"), settings->window_size);

0 commit comments

Comments
 (0)