This repo contains multiple implementations of an echo-servers using differents languages/frameworks.
| Dir | Contents | Language | Platform | Technologies |
|---|---|---|---|---|
| c_winsock_iocp_thread | Winsock 2 implementation using I/O Completion Ports, Overlapped sockets and worker threads | C | Windows | Winsock 2, IOCP |
| c_winsock_wsapoll | Winsock 2 implementation using WSAPoll and single thread | C | Windows | Winsock 2, WSAPoll |
| Dir | Contents | Language | Platform | Technologies |
|---|---|---|---|---|
| c_linux_epoll | Linux epoll implementation | C | Linux | epoll |
| c_bsd_kqueue | BSD kqueue implementation | C | BSD | kqueue |
| c_libuv | Libuv implementation | C | Multi | libuv |
| Java NIO | Java 21 using NIO single threaded | Java | Multi | Java NIO |
| Java Netty | Java 21 using Netty | Java | Multi | Java, Netty |
| Java NIO MT | Java 21 using NIO and virtual threads | Java | Multi | Java NIO, VT |
| Python | Python | Multi | Python | |
| C++ Boost.Asio | C++ using Boost.Asio | C++ | Multi | C++, Boost.Asio |
test_echo_server.py is a simple utility to test echo servers. Run with Python >= 3.8.
Note
Script will attempt to use poll() mechanism to manage client connections. If not poll() available (i.e Windows) it will to use select() method.
Description of utility:
usage: test_echo_server [-h] [-l LENGTH] [-i INTERVAL_RANGE] [-n NUM] [-p THREADS] [-c CONNECTIONS] host port Tests echo servers sending generated variable data. positional arguments: host host or ip of the server to test port port options: -h, --help show this help message and exit -l LENGTH, --length LENGTH length of string to send. -i INTERVAL_RANGE, --interval_range INTERVAL_RANGE interval range (format: [min-]<max>), in miliseconds, between each send of a string. This includes connections too. Script selects a random number between min and max -n NUM, --num NUM Num messages to send -p THREADS, --threads THREADS Num. of threads -c CONNECTIONS, --connections CONNECTIONS Connections by thread. Table format is: Send timestamp,finish send timestamp,timestamp of receiving response data,response time,length of data sent,length of data received,thread id,client_id,error flag (0 if no error) The error is marked when sent data and received data are not equals. Last column set to 1 if error occurs. Timestamp values are Unix Time in miliseconds. Time values are in miliseconds.