Open moscovium115 opened 7 months ago
Hi, do you need a http client or server? Currently the http client and http connection pool have been implemented. The http server has not been done.
Hi, sorry. I need a http client which you already have sorry for the confusion! I do have another question I have some trouble building your repo after installing F-stack with DPDK
git clone https://github.com/renzibei/flashws
cd flashws
git submodule update --init --recursive
root@ip-172-31-7-47:/data/flashws# cd tests
mkdir build
cmake .. -DFWS_ENABLE_FSTACK=ON
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- FWS_ENABLE_FSTACK ON
-- FWS_DEBUG: ON
-- FWS_DEV_DEBUG OFF
-- FWS_FORCE_NO_EPOLL OFF
-- FWS_FORCE_TIMEOUT_ZERO OFF
-- FWS_USE_BORINGSSL OFF
-- Performing Test COMPILER_SUPPORTS_AVX2
-- Performing Test COMPILER_SUPPORTS_AVX2 - Success
-- AVX2 supported. Adding -mavx2 flag.
-- Found OpenSSL: /usr/lib/x86_64-linux-gnu/libcrypto.so (found version "3.0.2")
-- Found PkgConfig: /usr/local/bin/pkg-config (found version "0.29.2")
-- Checking for module 'libdpdk'
-- Found libdpdk, version 22.11.3
-- Configuring done
-- Generating done
-- Build files have been written to: /data/flashws/tests
root@ip-172-31-7-47:/data/flashws/tests# make -j6
but build dir is empty:
root@ip-172-31-7-47:/data/flashws/tests/build# ls
root@ip-172-31-7-47:/data/flashws/tests/build#
Hi, I forgot to add one line between mkdir build
and cmake .. -DFWS_ENABLE_FSTACK=ON
. You should cd build
after mkdir build
.
Thanks for the speedy response. Another issue arises:
root@ip-172-31-7-47:/data# git clone https://github.com/renzibei/flashws
cd flashws
git submodule update --init --recursive
Cloning into 'flashws'...
remote: Enumerating objects: 443, done.
remote: Counting objects: 100% (443/443), done.
remote: Compressing objects: 100% (192/192), done.
remote: Total 443 (delta 268), reused 383 (delta 211), pack-reused 0
Receiving objects: 100% (443/443), 228.00 KiB | 413.00 KiB/s, done.
Resolving deltas: 100% (268/268), done.
Submodule 'thirdparty/HdrHistogram_c' (https://github.com/HdrHistogram/HdrHistogram_c.git) registered for path 'thirdparty/HdrHistogram_c'
Submodule 'thirdparty/boringssl' (https://github.com/google/boringssl.git) registered for path 'thirdparty/boringssl'
Cloning into '/data/flashws/thirdparty/HdrHistogram_c'...
Cloning into '/data/flashws/thirdparty/boringssl'...
Submodule path 'thirdparty/HdrHistogram_c': checked out '733b470eced028fac82a3cbfd064f2dcf545c6bc'
Submodule 'test/vendor/google/benchmark' (https://github.com/google/benchmark.git) registered for path 'thirdparty/HdrHistogram_c/test/vendor/google/benchmark'
Cloning into '/data/flashws/thirdparty/HdrHistogram_c/test/vendor/google/benchmark'...
Submodule path 'thirdparty/HdrHistogram_c/test/vendor/google/benchmark': checked out 'daff5fead3fbe22c6fc58310ca3f49caf117f185'
Submodule path 'thirdparty/boringssl': checked out 'df3b58ea74c50ff785ab902be3b007ff008d3e3c'
root@ip-172-31-7-47:/data/flashws# cd tests
mkdir build
root@ip-172-31-7-47:/data/flashws/tests# cd build
root@ip-172-31-7-47:/data/flashws/tests/build# cmake .. -DFWS_ENABLE_FSTACK=ON
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- FWS_ENABLE_FSTACK ON
-- FWS_DEBUG: ON
-- FWS_DEV_DEBUG OFF
-- FWS_FORCE_NO_EPOLL OFF
-- FWS_FORCE_TIMEOUT_ZERO OFF
-- FWS_USE_BORINGSSL OFF
-- Performing Test COMPILER_SUPPORTS_AVX2
-- Performing Test COMPILER_SUPPORTS_AVX2 - Success
-- AVX2 supported. Adding -mavx2 flag.
-- Found OpenSSL: /usr/lib/x86_64-linux-gnu/libcrypto.so (found version "3.0.2")
-- Found PkgConfig: /usr/local/bin/pkg-config (found version "0.29.2")
-- Checking for module 'libdpdk'
-- Found libdpdk, version 22.11.3
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11")
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Looking for ceil in m
-- Looking for ceil in m - found
-- Looking for clock_gettime in rt
-- Looking for clock_gettime in rt - found
CMake Error at CMakeLists.txt:20 (add_subdirectory):
add_subdirectory given source "test_ring_buffer" which is not an existing
directory.
-- Configuring incomplete, errors occurred!
See also "/data/flashws/tests/build/CMakeFiles/CMakeOutput.log".
@bruHFT Just fixed. You can pull again and test.
It got one step further, but not quite done
cmake .. -DFWS_ENABLE_FSTACK=ON
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- FWS_ENABLE_FSTACK ON
-- FWS_DEBUG: ON
-- FWS_DEV_DEBUG OFF
-- FWS_FORCE_NO_EPOLL OFF
-- FWS_FORCE_TIMEOUT_ZERO OFF
-- FWS_USE_BORINGSSL OFF
-- Performing Test COMPILER_SUPPORTS_AVX2
-- Performing Test COMPILER_SUPPORTS_AVX2 - Success
-- AVX2 supported. Adding -mavx2 flag.
-- Found OpenSSL: /usr/lib/x86_64-linux-gnu/libcrypto.so (found version "3.0.2")
-- Found PkgConfig: /usr/local/bin/pkg-config (found version "0.29.2")
-- Checking for module 'libdpdk'
-- Found libdpdk, version 22.11.3
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11")
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Looking for ceil in m
-- Looking for ceil in m - found
-- Looking for clock_gettime in rt
-- Looking for clock_gettime in rt - found
-- Configuring done
CMake Error at test-https-client/CMakeLists.txt:8 (add_executable):
Cannot find source file:
test_search.cpp
Tried extensions .c .C .c++ .cc .cpp .cxx .cu .mpp .m .M .mm .ixx .cppm .h
.hh .h++ .hm .hpp .hxx .in .txx .f .F .for .f77 .f90 .f95 .f03 .hip .ispc
CMake Error at test-https-client/CMakeLists.txt:8 (add_executable):
No SOURCES given to target: test_search
CMake Generate step failed. Build files cannot be regenerated correctly.
Updated, please try again.
thank you very much cmake now worked!
root@ip-172-31-7-47:/data/flashws/flashws/tests/build# cmake .. -DFWS_ENABLE_FSTACK=ON
-- FWS_ENABLE_FSTACK ON
-- FWS_DEBUG: ON
-- FWS_DEV_DEBUG OFF
-- FWS_FORCE_NO_EPOLL OFF
-- FWS_FORCE_TIMEOUT_ZERO OFF
-- FWS_USE_BORINGSSL OFF
-- AVX2 supported. Adding -mavx2 flag.
-- Configuring done
-- Generating done
-- Build files have been written to: /data/flashws/flashws/tests/build
but error in make -j6
root@ip-172-31-7-47:/data/flashws/flashws/tests/build# make -j6
[ 1%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram_static.dir/hdr_encoding.c.o
[ 3%] Building CXX object test-https-client/CMakeFiles/http_pool.dir/test_http_pool.cpp.o
[ 5%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram.dir/hdr_encoding.c.o
[ 7%] Building CXX object test-https-client/CMakeFiles/test_search.dir/test_search.cpp.o
[ 8%] Building CXX object test-new-tcp-echo/CMakeFiles/tcp_echo_server.dir/server.cpp.o
[ 10%] Building CXX object test-https-client/CMakeFiles/new_https_client.dir/https_client.cpp.o
[ 12%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram_static.dir/hdr_histogram.c.o
[ 14%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram.dir/hdr_histogram.c.o
[ 16%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram.dir/hdr_histogram_log.c.o
[ 17%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram_static.dir/hdr_histogram_log.c.o
[ 19%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram_static.dir/hdr_interval_recorder.c.o
[ 21%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram.dir/hdr_interval_recorder.c.o
[ 23%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram.dir/hdr_thread.c.o
[ 25%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram_static.dir/hdr_thread.c.o
[ 26%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram.dir/hdr_time.c.o
[ 28%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram_static.dir/hdr_time.c.o
[ 30%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram.dir/hdr_writer_reader_phaser.c.o
[ 32%] Linking C shared library libhdr_histogram.so
[ 33%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram_static.dir/hdr_writer_reader_phaser.c.o
[ 35%] Linking C static library libhdr_histogram_static.a
[ 35%] Built target hdr_histogram
[ 35%] Built target hdr_histogram_static
[ 37%] Building CXX object new-ws-echo/CMakeFiles/test_ws_server.dir/test_ws_server.cpp.o
[ 39%] Building CXX object test-utils/CMakeFiles/test_utils.dir/test_utils.cpp.o
/data/flashws/flashws/tests/test-https-client/test_search.cpp: In function ‘int main(int, char**)’:
/data/flashws/flashws/tests/test-https-client/test_search.cpp:31:14: warning: unused parameter ‘argc’ [-Wunused-parameter]
31 | int main(int argc, char *argv[])
| ~~~~^~~~
/data/flashws/flashws/tests/test-https-client/test_search.cpp:31:26: warning: unused parameter ‘argv’ [-Wunused-parameter]
31 | int main(int argc, char *argv[])
| ~~~~~~^~~~~~
[ 41%] Linking CXX executable test_search
/data/flashws/flashws/tests/test-utils/test_utils.cpp: In function ‘int main(int, const char**)’:
/data/flashws/flashws/tests/test-utils/test_utils.cpp:336:14: warning: unused parameter ‘argc’ [-Wunused-parameter]
336 | int main(int argc, const char** argv) {
| ~~~~^~~~
/data/flashws/flashws/tests/test-utils/test_utils.cpp:336:33: warning: unused parameter ‘argv’ [-Wunused-parameter]
336 | int main(int argc, const char** argv) {
| ~~~~~~~~~~~~~^~~~
/data/flashws/flashws/tests/test-utils/test_utils.cpp: In instantiation of ‘int64_t test::PureSha1AndBase(const char*, char*, const char*, const char*) [with long unsigned int client_key_len = 24; long unsigned int uuid_len = 36; int64_t = long int]’:
/data/flashws/flashws/tests/test-utils/test_utils.cpp:272:61: required from here
/data/flashws/flashws/tests/test-utils/test_utils.cpp:217:119: warning: unused parameter ‘ref_sha1’ [-Wunused-parameter]
217 | int64_t PureSha1AndBase(const char* FWS_RESTRICT client_key, char* FWS_RESTRICT dst_buf, const char* FWS_RESTRICT ref_sha1, const char* FWS_RESTRICT ref_dst) {
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
In file included from /data/flashws/flashws/include/flashws/flashws.h:8,
from /data/flashws/flashws/tests/test-https-client/https_client.cpp:4:
/data/flashws/flashws/include/flashws/net/floop.h: In static member function ‘static void fws::FLoop< <template-parameter-1-1> >::PreExit(fws::FLoop< <template-parameter-1-1> >*)’:
/data/flashws/flashws/include/flashws/net/floop.h:540:13: error: there are no arguments to ‘ff_stop_run’ that depend on a template parameter, so a declaration of ‘ff_stop_run’ must be available [-fpermissive]
540 | ff_stop_run();
| ^~~~~~~~~~~
/data/flashws/flashws/include/flashws/net/floop.h:540:13: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
/data/flashws/flashws/tests/test-https-client/https_client.cpp: In lambda function:
/data/flashws/flashws/tests/test-https-client/https_client.cpp:67:49: warning: unused parameter ‘sock’ [-Wunused-parameter]
67 | socket.SetOnReadable([](fws::TLSSocket &sock, fws::IOBuffer &&buf, void *user_data){
| ~~~~~~~~~~~~~~~~^~~~
/data/flashws/flashws/tests/test-https-client/https_client.cpp:67:82: warning: unused parameter ‘user_data’ [-Wunused-parameter]
67 | socket.SetOnReadable([](fws::TLSSocket &sock, fws::IOBuffer &&buf, void *user_data){
| ~~~~~~^~~~~~~~~
/data/flashws/flashws/tests/test-https-client/https_client.cpp: In lambda function:
/data/flashws/flashws/tests/test-https-client/https_client.cpp:75:51: warning: unused parameter ‘sock’ [-Wunused-parameter]
75 | socket.SetOnClose([&loop](fws::TLSSocket &sock, void *user_data){
| ~~~~~~~~~~~~~~~~^~~~
/data/flashws/flashws/tests/test-https-client/https_client.cpp:75:63: warning: unused parameter ‘user_data’ [-Wunused-parameter]
75 | socket.SetOnClose([&loop](fws::TLSSocket &sock, void *user_data){
| ~~~~~~^~~~~~~~~
/data/flashws/flashws/tests/test-https-client/https_client.cpp: In lambda function:
/data/flashws/flashws/tests/test-https-client/https_client.cpp:80:46: warning: unused parameter ‘sock’ [-Wunused-parameter]
80 | socket.SetOnError([](fws::TLSSocket& sock, int code, std::string_view reason, void *user_data) {
| ~~~~~~~~~~~~~~~~^~~~
/data/flashws/flashws/tests/test-https-client/https_client.cpp:80:93: warning: unused parameter ‘user_data’ [-Wunused-parameter]
80 | socket.SetOnError([](fws::TLSSocket& sock, int code, std::string_view reason, void *user_data) {
| ~~~~~~^~~~~~~~~
In file included from /data/flashws/flashws/include/flashws/flashws.h:8,
from /data/flashws/flashws/tests/test-new-tcp-echo/server.cpp:1:
/data/flashws/flashws/include/flashws/net/floop.h: In static member function ‘static void fws::FLoop< <template-parameter-1-1> >::PreExit(fws::FLoop< <template-parameter-1-1> >*)’:
/data/flashws/flashws/include/flashws/net/floop.h:540:13: error: there are no arguments to ‘ff_stop_run’ that depend on a template parameter, so a declaration of ‘ff_stop_run’ must be available [-fpermissive]
540 | ff_stop_run();
| ^~~~~~~~~~~
/data/flashws/flashws/include/flashws/net/floop.h:540:13: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
[ 42%] Linking CXX executable test_utils
In file included from /data/flashws/flashws/include/flashws/flashws.h:8,
from /data/flashws/flashws/tests/test-https-client/test_http_pool.cpp:1:
/data/flashws/flashws/include/flashws/net/floop.h: In static member function ‘static void fws::FLoop< <template-parameter-1-1> >::PreExit(fws::FLoop< <template-parameter-1-1> >*)’:
/data/flashws/flashws/include/flashws/net/floop.h:540:13: error: there are no arguments to ‘ff_stop_run’ that depend on a template parameter, so a declaration of ‘ff_stop_run’ must be available [-fpermissive]
540 | ff_stop_run();
| ^~~~~~~~~~~
/data/flashws/flashws/include/flashws/net/floop.h:540:13: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
/data/flashws/flashws/tests/test-new-tcp-echo/server.cpp: In lambda function:
/data/flashws/flashws/tests/test-new-tcp-echo/server.cpp:137:44: warning: unused parameter ‘sock’ [-Wunused-parameter]
137 | tcp_socket.SetOnOpen([&](SockType &sock, void* user_data) {
| ~~~~~~~~~~^~~~
/data/flashws/flashws/tests/test-new-tcp-echo/server.cpp: In lambda function:
/data/flashws/flashws/tests/test-new-tcp-echo/server.cpp:250:101: warning: unused parameter ‘user_data’ [-Wunused-parameter]
250 | tcp_socket.SetOnError([&](SockType &sock, int error_code, std::string_view error_msg, void* user_data) {
| ~~~~~~^~~~~~~~~
/data/flashws/flashws/tests/test-https-client/test_http_pool.cpp: In function ‘int test::TestHTTPClient()’:
/data/flashws/flashws/tests/test-https-client/test_http_pool.cpp:63:53: warning: missing initializer for member ‘test::Context::on_recv_msg’ [-Wmissing-field-initializers]
63 | Context ctx{0, 0, 0, &loop, &http_pool, 0, 0};
| ^
/data/flashws/flashws/tests/test-https-client/test_http_pool.cpp:63:53: warning: missing initializer for member ‘test::Context::on_error’ [-Wmissing-field-initializers]
/data/flashws/flashws/tests/test-https-client/test_http_pool.cpp: In lambda function:
/data/flashws/flashws/tests/test-https-client/test_http_pool.cpp:100:71: warning: unused parameter ‘http’ [-Wunused-parameter]
100 | auto on_error = [](fws::HTTPClientPool<true>::ClientType &http, std::string_view reason) {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
/data/flashws/flashws/tests/test-https-client/test_http_pool.cpp: In lambda function:
/data/flashws/flashws/tests/test-https-client/test_http_pool.cpp:109:50: warning: unused parameter ‘loop’ [-Wunused-parameter]
109 | loop.SetOnEventFunc([&ctx](fws::FLoop<>& loop) {
| ~~~~~~~~~~~~~~^~~~
In file included from /data/flashws/flashws/include/flashws/flashws.h:8,
from /data/flashws/flashws/tests/test-https-client/https_client.cpp:4:
/data/flashws/flashws/include/flashws/net/floop.h: In instantiation of ‘static void fws::FLoop< <template-parameter-1-1> >::PreExit(fws::FLoop< <template-parameter-1-1> >*) [with Allocator = fws::FlashAllocator<char>]’:
/data/flashws/flashws/include/flashws/net/floop.h:552:24: required from ‘static int fws::FLoop< <template-parameter-1-1> >::OneStep(void*) [with Allocator = fws::FlashAllocator<char>]’
/data/flashws/flashws/include/flashws/net/floop.h:334:19: required from ‘void fws::FLoop< <template-parameter-1-1> >::Run() [with Allocator = fws::FlashAllocator<char>]’
/data/flashws/flashws/tests/test-https-client/https_client.cpp:97:17: required from here
/data/flashws/flashws/include/flashws/net/floop.h:540:24: error: ‘ff_stop_run’ was not declared in this scope
540 | ff_stop_run();
| ~~~~~~~~~~~^~
In file included from /data/flashws/flashws/include/flashws/flashws.h:8,
from /data/flashws/flashws/tests/test-new-tcp-echo/server.cpp:1:
/data/flashws/flashws/include/flashws/net/floop.h: In instantiation of ‘static void fws::FLoop< <template-parameter-1-1> >::PreExit(fws::FLoop< <template-parameter-1-1> >*) [with Allocator = fws::FlashAllocator<char>]’:
/data/flashws/flashws/include/flashws/net/floop.h:552:24: required from ‘static int fws::FLoop< <template-parameter-1-1> >::OneStep(void*) [with Allocator = fws::FlashAllocator<char>]’
/data/flashws/flashws/include/flashws/net/floop.h:334:19: required from ‘void fws::FLoop< <template-parameter-1-1> >::Run() [with Allocator = fws::FlashAllocator<char>]’
/data/flashws/flashws/tests/test-new-tcp-echo/server.cpp:269:26: required from here
/data/flashws/flashws/include/flashws/net/floop.h:540:24: error: ‘ff_stop_run’ was not declared in this scope
540 | ff_stop_run();
| ~~~~~~~~~~~^~
In file included from /data/flashws/flashws/include/flashws/flashws.h:8,
from /data/flashws/flashws/tests/test-https-client/test_http_pool.cpp:1:
/data/flashws/flashws/include/flashws/net/floop.h: In instantiation of ‘static void fws::FLoop< <template-parameter-1-1> >::PreExit(fws::FLoop< <template-parameter-1-1> >*) [with Allocator = fws::FlashAllocator<char>]’:
/data/flashws/flashws/include/flashws/net/floop.h:552:24: required from ‘static int fws::FLoop< <template-parameter-1-1> >::OneStep(void*) [with Allocator = fws::FlashAllocator<char>]’
/data/flashws/flashws/include/flashws/net/floop.h:334:19: required from ‘void fws::FLoop< <template-parameter-1-1> >::Run() [with Allocator = fws::FlashAllocator<char>]’
/data/flashws/flashws/tests/test-https-client/test_http_pool.cpp:130:17: required from here
/data/flashws/flashws/include/flashws/net/floop.h:540:24: error: ‘ff_stop_run’ was not declared in this scope
540 | ff_stop_run();
| ~~~~~~~~~~~^~
In file included from /data/flashws/flashws/include/flashws/flashws.h:8,
from /data/flashws/flashws/tests/new-ws-echo/test_ws_server.cpp:1:
/data/flashws/flashws/include/flashws/net/floop.h: In static member function ‘static void fws::FLoop< <template-parameter-1-1> >::PreExit(fws::FLoop< <template-parameter-1-1> >*)’:
/data/flashws/flashws/include/flashws/net/floop.h:540:13: error: there are no arguments to ‘ff_stop_run’ that depend on a template parameter, so a declaration of ‘ff_stop_run’ must be available [-fpermissive]
540 | ff_stop_run();
| ^~~~~~~~~~~
/data/flashws/flashws/include/flashws/net/floop.h:540:13: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
/data/flashws/flashws/tests/new-ws-echo/test_ws_server.cpp: In lambda function:
/data/flashws/flashws/tests/new-ws-echo/test_ws_server.cpp:165:51: warning: unused parameter ‘w_socket’ [-Wunused-parameter]
165 | ws_socket.SetOnNewConnection([](WSSocket &w_socket, std::string_view req_uri,
| ~~~~~~~~~~^~~~~~~~
/data/flashws/flashws/tests/new-ws-echo/test_ws_server.cpp:165:78: warning: unused parameter ‘req_uri’ [-Wunused-parameter]
165 | ws_socket.SetOnNewConnection([](WSSocket &w_socket, std::string_view req_uri,
| ~~~~~~~~~~~~~~~~~^~~~~~~
/data/flashws/flashws/tests/new-ws-echo/test_ws_server.cpp:166:58: warning: unused parameter ‘host’ [-Wunused-parameter]
166 | std::string_view host, std::string_view origin,
| ~~~~~~~~~~~~~~~~~^~~~
/data/flashws/flashws/tests/new-ws-echo/test_ws_server.cpp:166:81: warning: unused parameter ‘origin’ [-Wunused-parameter]
166 | std::string_view host, std::string_view origin,
| ~~~~~~~~~~~~~~~~~^~~~~~
/data/flashws/flashws/tests/new-ws-echo/test_ws_server.cpp:169:59: warning: unused parameter ‘resp_sub_protocol’ [-Wunused-parameter]
169 | std::string_view &resp_sub_protocol,
| ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
/data/flashws/flashws/tests/new-ws-echo/test_ws_server.cpp:170:59: warning: unused parameter ‘resp_extensions’ [-Wunused-parameter]
170 | std::string_view &resp_extensions, void *user_data) {
| ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
make[2]: *** [test-https-client/CMakeFiles/new_https_client.dir/build.make:76: test-https-client/CMakeFiles/new_https_client.dir/https_client.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:1349: test-https-client/CMakeFiles/new_https_client.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
make[2]: *** [test-new-tcp-echo/CMakeFiles/tcp_echo_server.dir/build.make:76: test-new-tcp-echo/CMakeFiles/tcp_echo_server.dir/server.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:1323: test-new-tcp-echo/CMakeFiles/tcp_echo_server.dir/all] Error 2
In file included from /data/flashws/flashws/include/flashws/flashws.h:8,
from /data/flashws/flashws/tests/new-ws-echo/test_ws_server.cpp:1:
/data/flashws/flashws/include/flashws/net/floop.h: In instantiation of ‘static void fws::FLoop< <template-parameter-1-1> >::PreExit(fws::FLoop< <template-parameter-1-1> >*) [with Allocator = fws::FlashAllocator<char>]’:
/data/flashws/flashws/include/flashws/net/floop.h:552:24: required from ‘static int fws::FLoop< <template-parameter-1-1> >::OneStep(void*) [with Allocator = fws::FlashAllocator<char>]’
/data/flashws/flashws/include/flashws/net/floop.h:334:19: required from ‘void fws::FLoop< <template-parameter-1-1> >::Run() [with Allocator = fws::FlashAllocator<char>]’
/data/flashws/flashws/tests/new-ws-echo/test_ws_server.cpp:265:21: required from here
/data/flashws/flashws/include/flashws/net/floop.h:540:24: error: ‘ff_stop_run’ was not declared in this scope
540 | ff_stop_run();
| ~~~~~~~~~~~^~
make[2]: *** [test-https-client/CMakeFiles/http_pool.dir/build.make:76: test-https-client/CMakeFiles/http_pool.dir/test_http_pool.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:1401: test-https-client/CMakeFiles/http_pool.dir/all] Error 2
make[2]: *** [new-ws-echo/CMakeFiles/test_ws_server.dir/build.make:76: new-ws-echo/CMakeFiles/test_ws_server.dir/test_ws_server.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:1453: new-ws-echo/CMakeFiles/test_ws_server.dir/all] Error 2
[ 42%] Built target test_search
[ 42%] Built target test_utils
make: *** [Makefile:156: all] Error 2
This error is caused by the fact that the latest version of flashws
rely on a pull request created by me, which has not been merged. You can rebuild and install the f-stack using my fork of f-stack.
Thank you very much will check this out tomorrow!
I compiled F-stack using your fork. It got a bit further but make -j6
froze making the whole system unresponsive.
root@ip-172-31-13-133:/data/build/flashws/tests/build# make -j6
[ 1%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram_static.dir/hdr_encoding.c.o
[ 3%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram.dir/hdr_encoding.c.o
[ 5%] Building CXX object test-https-client/CMakeFiles/test_search.dir/test_search.cpp.o
[ 7%] Building CXX object test-https-client/CMakeFiles/new_https_client.dir/https_client.cpp.o
[ 8%] Building CXX object test-new-tcp-echo/CMakeFiles/tcp_echo_server.dir/server.cpp.o
[ 10%] Building CXX object test-https-client/CMakeFiles/http_pool.dir/test_http_pool.cpp.o
[ 12%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram_static.dir/hdr_histogram.c.o
[ 14%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram.dir/hdr_histogram.c.o
[ 16%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram_static.dir/hdr_histogram_log.c.o
[ 17%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram.dir/hdr_histogram_log.c.o
[ 19%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram_static.dir/hdr_interval_recorder.c.o
[ 21%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram.dir/hdr_interval_recorder.c.o
[ 23%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram.dir/hdr_thread.c.o
[ 25%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram_static.dir/hdr_thread.c.o
[ 26%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram.dir/hdr_time.c.o
[ 28%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram_static.dir/hdr_time.c.o
[ 30%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram.dir/hdr_writer_reader_phaser.c.o
[ 32%] Building C object HdrHistogram_c/src/CMakeFiles/hdr_histogram_static.dir/hdr_writer_reader_phaser.c.o
/data/build/flashws/tests/test-https-client/test_search.cpp: In function ‘int main(int, char**)’:
/data/build/flashws/tests/test-https-client/test_search.cpp:31:14: warning: unused parameter ‘argc’ [-Wunused-parameter]
31 | int main(int argc, char *argv[])
| ~~~~^~~~
/data/build/flashws/tests/test-https-client/test_search.cpp:31:26: warning: unused parameter ‘argv’ [-Wunused-parameter]
31 | int main(int argc, char *argv[])
| ~~~~~~^~~~~~
[ 33%] Linking C static library libhdr_histogram_static.a
[ 35%] Linking C shared library libhdr_histogram.so
[ 35%] Built target hdr_histogram_static
[ 35%] Built target hdr_histogram
[ 37%] Building CXX object new-ws-echo/CMakeFiles/test_ws_server.dir/test_ws_server.cpp.o
[ 39%] Building CXX object test-utils/CMakeFiles/test_utils.dir/test_utils.cpp.o
[ 41%] Linking CXX executable test_search
/data/build/flashws/tests/test-utils/test_utils.cpp: In function ‘int main(int, const char**)’:
/data/build/flashws/tests/test-utils/test_utils.cpp:336:14: warning: unused parameter ‘argc’ [-Wunused-parameter]
336 | int main(int argc, const char** argv) {
| ~~~~^~~~
/data/build/flashws/tests/test-utils/test_utils.cpp:336:33: warning: unused parameter ‘argv’ [-Wunused-parameter]
336 | int main(int argc, const char** argv) {
| ~~~~~~~~~~~~~^~~~
/data/build/flashws/tests/test-utils/test_utils.cpp: In instantiation of ‘int64_t test::PureSha1AndBase(const char*, char*, const char*, const char*) [with long unsigned int client_key_len = 24; long unsigned int uuid_len = 36; int64_t = long int]’:
/data/build/flashws/tests/test-utils/test_utils.cpp:272:61: required from here
/data/build/flashws/tests/test-utils/test_utils.cpp:217:119: warning: unused parameter ‘ref_sha1’ [-Wunused-parameter]
217 | int64_t PureSha1AndBase(const char* FWS_RESTRICT client_key, char* FWS_RESTRICT dst_buf, const char* FWS_RESTRICT ref_sha1, const char* FWS_RESTRICT ref_dst) {
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
/data/build/flashws/tests/test-https-client/test_http_pool.cpp: In function ‘int test::TestHTTPClient()’:
/data/build/flashws/tests/test-https-client/test_http_pool.cpp:63:53: warning: missing initializer for member ‘test::Context::on_recv_msg’ [-Wmissing-field-initializers]
63 | Context ctx{0, 0, 0, &loop, &http_pool, 0, 0};
| ^
/data/build/flashws/tests/test-https-client/test_http_pool.cpp:63:53: warning: missing initializer for member ‘test::Context::on_error’ [-Wmissing-field-initializers]
/data/build/flashws/tests/test-https-client/test_http_pool.cpp: In lambda function:
/data/build/flashws/tests/test-https-client/test_http_pool.cpp:100:71: warning: unused parameter ‘http’ [-Wunused-parameter]
100 | auto on_error = [](fws::HTTPClientPool<true>::ClientType &http, std::string_view reason) {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
/data/build/flashws/tests/test-https-client/test_http_pool.cpp: In lambda function:
/data/build/flashws/tests/test-https-client/test_http_pool.cpp:109:50: warning: unused parameter ‘loop’ [-Wunused-parameter]
109 | loop.SetOnEventFunc([&ctx](fws::FLoop<>& loop) {
| ~~~~~~~~~~~~~~^~~~
/data/build/flashws/tests/test-https-client/https_client.cpp: In lambda function:
/data/build/flashws/tests/test-https-client/https_client.cpp:67:49: warning: unused parameter ‘sock’ [-Wunused-parameter]
67 | socket.SetOnReadable([](fws::TLSSocket &sock, fws::IOBuffer &&buf, void *user_data){
| ~~~~~~~~~~~~~~~~^~~~
/data/build/flashws/tests/test-https-client/https_client.cpp:67:82: warning: unused parameter ‘user_data’ [-Wunused-parameter]
67 | socket.SetOnReadable([](fws::TLSSocket &sock, fws::IOBuffer &&buf, void *user_data){
| ~~~~~~^~~~~~~~~
/data/build/flashws/tests/test-https-client/https_client.cpp: In lambda function:
/data/build/flashws/tests/test-https-client/https_client.cpp:75:51: warning: unused parameter ‘sock’ [-Wunused-parameter]
75 | socket.SetOnClose([&loop](fws::TLSSocket &sock, void *user_data){
| ~~~~~~~~~~~~~~~~^~~~
/data/build/flashws/tests/test-https-client/https_client.cpp:75:63: warning: unused parameter ‘user_data’ [-Wunused-parameter]
75 | socket.SetOnClose([&loop](fws::TLSSocket &sock, void *user_data){
| ~~~~~~^~~~~~~~~
/data/build/flashws/tests/test-https-client/https_client.cpp: In lambda function:
/data/build/flashws/tests/test-https-client/https_client.cpp:80:46: warning: unused parameter ‘sock’ [-Wunused-parameter]
80 | socket.SetOnError([](fws::TLSSocket& sock, int code, std::string_view reason, void *user_data) {
| ~~~~~~~~~~~~~~~~^~~~
/data/build/flashws/tests/test-https-client/https_client.cpp:80:93: warning: unused parameter ‘user_data’ [-Wunused-parameter]
80 | socket.SetOnError([](fws::TLSSocket& sock, int code, std::string_view reason, void *user_data) {
| ~~~~~~^~~~~~~~~
/data/build/flashws/tests/test-new-tcp-echo/server.cpp: In lambda function:
/data/build/flashws/tests/test-new-tcp-echo/server.cpp:137:44: warning: unused parameter ‘sock’ [-Wunused-parameter]
137 | tcp_socket.SetOnOpen([&](SockType &sock, void* user_data) {
| ~~~~~~~~~~^~~~
/data/build/flashws/tests/test-new-tcp-echo/server.cpp: In lambda function:
/data/build/flashws/tests/test-new-tcp-echo/server.cpp:250:101: warning: unused parameter ‘user_data’ [-Wunused-parameter]
250 | tcp_socket.SetOnError([&](SockType &sock, int error_code, std::string_view error_msg, void* user_data) {
| ~~~~~~^~~~~~~~~
[ 42%] Linking CXX executable test_utils
/data/build/flashws/tests/new-ws-echo/test_ws_server.cpp: In lambda function:
/data/build/flashws/tests/new-ws-echo/test_ws_server.cpp:165:51: warning: unused parameter ‘w_socket’ [-Wunused-parameter]
165 | ws_socket.SetOnNewConnection([](WSSocket &w_socket, std::string_view req_uri,
| ~~~~~~~~~~^~~~~~~~
/data/build/flashws/tests/new-ws-echo/test_ws_server.cpp:165:78: warning: unused parameter ‘req_uri’ [-Wunused-parameter]
165 | ws_socket.SetOnNewConnection([](WSSocket &w_socket, std::string_view req_uri,
| ~~~~~~~~~~~~~~~~~^~~~~~~
/data/build/flashws/tests/new-ws-echo/test_ws_server.cpp:166:58: warning: unused parameter ‘host’ [-Wunused-parameter]
166 | std::string_view host, std::string_view origin,
| ~~~~~~~~~~~~~~~~~^~~~
/data/build/flashws/tests/new-ws-echo/test_ws_server.cpp:166:81: warning: unused parameter ‘origin’ [-Wunused-parameter]
166 | std::string_view host, std::string_view origin,
| ~~~~~~~~~~~~~~~~~^~~~~~
/data/build/flashws/tests/new-ws-echo/test_ws_server.cpp:169:59: warning: unused parameter ‘resp_sub_protocol’ [-Wunused-parameter]
169 | std::string_view &resp_sub_protocol,
| ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
/data/build/flashws/tests/new-ws-echo/test_ws_server.cpp:170:59: warning: unused parameter ‘resp_extensions’ [-Wunused-parameter]
170 | std::string_view &resp_extensions, void *user_data) {
| ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
You can omit the -j6 parameter if the cpu resource is limited.
thanks that worked! how to run the http client?
root@ip-172-31-13-133:/data/build/flashws/tests/build/test-https-client# ./new_https_client
AddressSanitizer:DEADLYSIGNAL
=================================================================
==31483==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000008 (pc 0x555556cb8e86 bp 0x7fffffffe040 sp 0x7fffffffdd70 T0)
==31483==The signal is caused by a READ memory access.
==31483==Hint: address points to the zero page.
#0 0x555556cb8e86 in kern_kqueue (/data/build/flashws/tests/build/test-https-client/new_https_client+0x1764e86)
#1 0x555556c8fdc8 in ff_kqueue (/data/build/flashws/tests/build/test-https-client/new_https_client+0x173bdc8)
#2 0x555556f07001 in fws::CreateFQueue(int) /data/build/flashws/include/flashws/net/fevent.h:409
#3 0x555556f07001 in int fws::FLoop<fws::FlashAllocator<char> >::Init<true>() /data/build/flashws/include/flashws/net/floop.h:175
#4 0x555556eea349 in test::TestHTTPSClient() /data/build/flashws/tests/test-https-client/https_client.cpp:15
#5 0x555556eeab13 in main /data/build/flashws/tests/test-https-client/https_client.cpp:107
#6 0x7ffff6629d8f (/lib/x86_64-linux-gnu/libc.so.6+0x29d8f)
#7 0x7ffff6629e3f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e3f)
#8 0x5555564dda24 in _start (/data/build/flashws/tests/build/test-https-client/new_https_client+0xf89a24)
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV (/data/build/flashws/tests/build/test-https-client/new_https_client+0x1764e86) in kern_kqueue
==31483==ABORTING
If you want to use f-stack with flashws, you need to pass the config file to it, which is required by f-stack. The ip info is written in the config file. You can check the hello world example in the f-stack to get started.
Thanks, with passing the config file to f-stack do you mean? ./example/helloworld --conf config.ini --proc-type=primary --proc-id=0
using the same command slightly adjusted to run test_https_client does not work and results in the same error as before
Yes, it's the parameters like --conf config.ini --proc-type=primary --proc-id=0
.
Let me check the https example.
I made some updates, you can try again with the configs set.
Thank you. It seems to work now, but this is just simply the F-stack hello world
example or not?
root@ip-172-31-7-47:/data/flashws/tests/build/test-https-client# ./new_https_client --conf /data/f-stack/example/config.ini --proc-type=primary --proc-id=0
[dpdk]: lcore_mask=1
[dpdk]: channel=4
[dpdk]: promiscuous=1
[dpdk]: numa_on=1
[dpdk]: tx_csum_offoad_skip=0
[dpdk]: tso=0
[dpdk]: vlan_strip=1
[dpdk]: idle_sleep=0
[dpdk]: pkt_tx_delay=100
[dpdk]: symmetric_rss=0
[dpdk]: port_list=0
[dpdk]: nb_vdev=0
[dpdk]: nb_bond=0
[pcap]: enable=0
[pcap]: snaplen=96
[pcap]: savelen=16777216
[pcap]: savepath=.
[port0]: addr=192.168.1.2
[port0]: netmask=255.255.255.0
[port0]: broadcast=192.168.1.255
[port0]: gateway=192.168.1.1
[freebsd.boot]: hz=100
[freebsd.boot]: fd_reserve=1024
[freebsd.boot]: kern.ipc.maxsockets=262144
[freebsd.boot]: net.inet.tcp.syncache.hashsize=4096
[freebsd.boot]: net.inet.tcp.syncache.bucketlimit=100
[freebsd.boot]: net.inet.tcp.tcbhashsize=65536
[freebsd.boot]: kern.ncallout=262144
[freebsd.boot]: kern.features.inet6=1
[freebsd.sysctl]: kern.ipc.somaxconn=32768
[freebsd.sysctl]: kern.ipc.maxsockbuf=16777216
[freebsd.sysctl]: net.add_addr_allfibs=1
[freebsd.sysctl]: net.link.ether.inet.maxhold=5
[freebsd.sysctl]: net.inet.tcp.fast_finwait2_recycle=1
[freebsd.sysctl]: net.inet.tcp.sendspace=16384
[freebsd.sysctl]: net.inet.tcp.recvspace=8192
[freebsd.sysctl]: net.inet.tcp.cc.algorithm=cubic
[freebsd.sysctl]: net.inet.tcp.sendbuf_max=16777216
[freebsd.sysctl]: net.inet.tcp.recvbuf_max=16777216
[freebsd.sysctl]: net.inet.tcp.sendbuf_auto=1
[freebsd.sysctl]: net.inet.tcp.recvbuf_auto=1
[freebsd.sysctl]: net.inet.tcp.sendbuf_inc=16384
[freebsd.sysctl]: net.inet.tcp.sack.enable=1
[freebsd.sysctl]: net.inet.tcp.blackhole=1
[freebsd.sysctl]: net.inet.tcp.msl=2000
[freebsd.sysctl]: net.inet.tcp.delayed_ack=1
[freebsd.sysctl]: net.inet.tcp.rfc1323=1
[freebsd.sysctl]: net.inet.udp.blackhole=1
[freebsd.sysctl]: net.inet.ip.redirect=0
[freebsd.sysctl]: net.inet.ip.forwarding=0
[freebsd.sysctl]: net.inet6.ip6.auto_linklocal=1
[freebsd.sysctl]: net.inet6.ip6.accept_rtadv=2
[freebsd.sysctl]: net.inet6.icmp6.rediraccept=1
[freebsd.sysctl]: net.inet6.ip6.forwarding=0
[freebsd.sysctl]: net.inet.tcp.functions_default=freebsd
[freebsd.sysctl]: net.inet.tcp.hpts.skip_swi=1
[freebsd.sysctl]: net.inet.tcp.hpts.minsleep=250
[freebsd.sysctl]: net.inet.tcp.hpts.maxsleep=51200
f-stack -c1 -n4 --proc-type=primary
EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
lcore: 0, port: 0, queue: 0
create mbuf pool on socket 0
create ring:dispatch_ring_p0_q0 success, 2047 ring entries are now free!
Port 0 MAC:0A:1F:01:B2:CF:A5
Port 0 modified RSS hash function based on hardware support,requested:0x2003ffffc configured:0xc30
RX checksum offload supported
TX ip checksum offload supported
TX TCP&UDP checksum offload supported
TSO is disabled
port[0]: rss table size: 128
ena_rss_hash_set(): Setting RSS hash fields is not supported. Using default values: 0xc30
set port 0 to promiscuous mode error
Checking link statusdone
Port 0 Link Up - speed 0 Mbps - full-duplex
link_elf_lookup_symbol: missing symbol hash table
link_elf_lookup_symbol: missing symbol hash table
Timecounters tick every 10.000 msec
WARNING: Adding ifaddrs to all fibs has been turned off by default. Consider tuning net.add_addr_allfibs if needed
Attempting to load tcp_bbr
tcp_bbr is now available
TCP Hpts created 1 swi interrupt threads and bound 0 to cpus
Timecounter "ff_clock" frequency 100 Hz quality 1
TCP_ratelimit: Is now initialized
f-stack-0: No addr6 config found.
f-stack-0: Ethernet address: 0a:1f:01:b2:cf:a5
The program you run should use HTTP GET to fetch the http content from some sites like google.com and print to stdout. Have you modified the config.ini to suit your machine? Is 192.168.1.2 your ip?
You can refer to this config, and change the ip and gateway to suit your machine.
Ah thank you! I'm using AWS and have added an additional NIC, so have to figure out where I can exactly find gateway, but IP is known. Will follow up later
Hi! I reattempted to use F-stack on Amazon Linux (AL) this time instead of Ubuntu since AL automatically sets up the additional NIC I added.
Now the helloworld of F stack application was working fine, since when interacting with the server on the client machine I got the following:
But running the https client of flashws still does not fetch any requests. Have you got any ideas?
I need more information to know the situation, including the Code, the network structure and configurations. For example, did you let DPDK to take the ownership of the NIC in the client machine? And is the client‘s NIC in the same sub-network as the server? What's the security group settings? Did you make sure the client turned off the TLS, if the server is not running a https service?
And for test, you can use the original https client code, which send a GET request to a public website, and assign a puiblic ip to the network interface that would be controlled by DPDK.
Hello Developer,
The repository you have made looks very interesting and we were wondering whether we can use the code to send and receive HTTP requests to a certain URL. We can see a HTTP client, but not a server. Any guidance to achieves these goals will be highly appreciated.
Thank you