multiplexer
Sharing a server TCP connection between multiple clients
Install
As the pre release, I only build this for Windows platform. But you can build
it on other platforms using Mono. It should be easy since there's no external
dependencies.
Grab the binary from release.
Or via NPM:
npm install -g tcpmultiplexer
Usage
- Start the multiplexer from command line
- Connect clients to localhost:3333
- In multiplxer command line, input command
connect <server> <port>
to connect to the remote service that will be shared by all the clients. - At any time, you can terminate a client, or connect a new client, without affecting the connection to the remote server.
> multiplexer --help
-p, --port (Default: 3333) Local port to listen for client
connections
--help Display this help screen.
--version Display version information.
remote-host (pos. 0) Remote server to connect (for auto-connect). If not
specified, auto-connect is disabled.
remote-port (pos. 1) Remote port to connect (for auto-connect). If not
specified, auto-connect is disabled.
Example
multiplexer example.com 8080 -p 3333
Listens at localhost:3333
for client connections. Upon first client connection, automatically connects to remote server example.com:8080
.
Introduction
This tool allows multiple TCP clients to share a single TCP connection to
a server. Traffic generated by the server is forwarded to all clients. Traffic
generated from any client is forwarded to the server.
This graph demonstrates the idea
How is it useful? In many cases, we want to write program to automate tasks
with a remote service, but at the same time want to keep using the existing
tool that doesn't offer the functionality that your automation program is
capable of, but provides an easy/familiar UI, so that your automation program
won't have to.
Performance
All TCP connections (server-multiplexer, multiplexer-clients) IO operations
are completely non-blocking. I expect the traffic throughput to be very high.
Demo
Here's a demonstration of it in action. As an example, in this case, there're
two MUD clients sharing the same connection to the server. Imagine one of the
two clients is a thin program that automates your player, but provides no
ability for human intervention. And the other client is a regular feature-rich
MUD client that you can interact with.