Question: Introduction For this programming assignment you will create the world's simplest reverse proxy. Again, as in the prior progrogramming assignment, you may program this in

Introduction
For this programming assignment you will create the world's simplest reverse proxy. Again, as in the prior progrogramming assignment, you may program this in the language of your choice (it doesn't even have to be the same language as the first assignment). You will need at least four terminal/console windows running: one client, one proxy, and at least two (2) server instances.
Please see the note at the bottom of this page if you were not able to complete the prior programming assignment, and need a client/server to complete this assignment.
Details
proxy
Arguments for upstream ports: array/tuple/set/list (whatever your language supports). These will be the dynamic ports for the server instances.
Accept traffic on a given port.
Send any 'PING' messages in a round-robin scheduleLinks to an external site. between all the given upstream ports.
Any replies it receives from upstream, it will send to the downstream client with ' via ${SERVER_PORT}[${SERVER_IDX}]' appended to the message
${SERVER_PORT} is the upstream server port.
${SERVER_IDX} is the upstream server index in the upstream array.
Example Diagram
port:8001
server
client proxy
port:8000
server
port:8002
In the above example diagram, the proxy is listening on port 8000, and is fronting two servers instances listening on port 8001, and 8002.
Example Output with Client, Proxy, and two Server Instances
Client:
\lambda python client.py --port 8000
1 : sent PING... received b'PONG via 8001[0]'
2 : sent PING... Timed Out
3 : sent PING... Timed Out
4 : sent PING... received b'PONG via 8002[1]'
5 : sent PING... received b'PONG via 8001[0]'
6 : sent PING... Timed Out
7 : sent PING... received b'PONG via 8001[0]'
8 : sent PING... received b'PONG via 8002[1]'
9 : sent PING... received b'PONG via 8001[0]'
10 : sent PING... received b'PONG via 8002[1]'
Proxy:
\lambda python proxy.py --port 8000
[proxy] : ready to proxy data...
Server #0:
\lambda python server.py --port 8001
[server] : ready to accept data...
[client] : PING
[server] : packet dropped
[client] : PING
[client] : PING
[client] : PING
Server #1:
\lambda python server.py --port 8002
[server] : ready to accept data...
[server] : packet dropped
[client] : PING
[server] : packet dropped
[client] : PING
[server] : PING
Deliverables
One (1) source code file for your proxy server (e.g. proxy.py, main.go, etc.).
A README file that explains how to run your program.
Screenshots of your program running (they can be running on your own machine or the CSE machine).
NOTE: your screenshot should include your name / EUID somewhere (you can print it at the beginning of your program or change the command prompt to your name, etc)
Note: Free Client/Server UDP Zinger
If you were not able to complete the previous networking assignment, you may use this zinger program to complete this proxy programming assignment. If you encounter any issues with it, please let me know.
The zinger program prints "ZING/ZONG" so it cannot be used for the previous assignment.
Zinger Binary Table
OS Architecture Binary
Windows AMD64/x64 zinger_windows_amd64.exeDownload zinger_windows_amd64.exe
Windows ARM64 zinger_windows_arm64.exeDownload zinger_windows_arm64.exe
Linux AMD64/x64 zinger_linux_amd64Download zinger_linux_amd64
Linux ARM64 zinger_linux_arm64Download zinger_linux_arm64
macOS AMD64/x64(Intel Macs) zinger_macos_amd64Download zinger_macos_amd64
macOS ARM64(Apple Silicon) zinger_macos_arm64Download zinger_macos_arm64

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!