Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

websocketd - a small command-line tool that will wrap an existing command-line interface program, and allow it to be accessed via a WebSocket. #747

Open
1 task
irthomasthomas opened this issue Mar 16, 2024 · 1 comment
Labels
CLI-UX Command Line Interface user experience and best practices code-generation code generation models and tools like copilot and aider Git-Repo Source code repository like gitlab or gh New-Label Choose this option if the existing labels are insufficient to describe the content accurately

Comments

@irthomasthomas
Copy link
Owner

websocketd/README.md at master · joewalnes/websocketd

DESCRIPTION:
websocketd

websocketd is a small command-line tool that will wrap an existing command-line interface program, and allow it to be accessed via a WebSocket.

WebSocket-capable applications can now be built very easily. As long as you can write an executable program that reads STDIN and writes to STDOUT, you can build a WebSocket server. Do it in Python, Ruby, Perl, Bash, .NET, C, Go, PHP, Java, Clojure, Scala, Groovy, Expect, Awk, VBScript, Haskell, Lua, R, whatever! No networking libraries necessary.

-@joewalnes

Details

Upon startup, websocketd will start a WebSocket server on a specified port, and listen for connections.

Upon a connection, it will fork the appropriate process, and disconnect the process when the WebSocket connection closes (and vice-versa).

Any message sent from the WebSocket client will be piped to the process's STDIN stream, followed by a \n newline.

Any text printed by the process to STDOUT shall be sent as a WebSocket message whenever a \n newline is encountered.

Download

If you're on a Mac, you can install websocketd using Homebrew. Just run brew install websocketd. For other operating systems, or if you don't want to use Homebrew, check out the link below.

Download for Linux, OS X and Windows

Quickstart

To get started, we'll create a WebSocket endpoint that will accept connections, then send back messages, counting to 10 with 1 second pause between each one, before disconnecting.

To show how simple it is, let's do it in Bash!

count.sh:

#!/bin/bash
for ((COUNT = 1; COUNT <= 10; COUNT++)); do
  echo $COUNT
  sleep 1
done

Before turning it into a WebSocket server, let's test it from the command line. The beauty of websocketd is that servers work equally well in the command line, or in shell scripts, as they do in the server - with no modifications required.

$ chmod +x count.sh
$ ./count.sh
1
2
3
4
5
6
7
8
9
10

Now let's turn it into a WebSocket server:

$ websocketd --port=8080 ./count.sh

Finally, let's create a web-page to test it.

count.html:

<!DOCTYPE html>
<pre id="log"></pre>
<script>
  // helper function: log message to screen
  function log(msg) {
    document.getElementById('log').textContent += msg + '\n';
  }

  // setup websocket with callbacks
  var ws = new WebSocket('ws://localhost:8080/');
  ws.onopen = function() {
    log('CONNECT');
  };
  ws.onclose = function() {
    log('DISCONNECT');
  };
  ws.onmessage = function(event) {
    log('MESSAGE: ' + event.data);
  };
</script>

Open this page in your web-browser. It will even work if you open it directly
from disk using a file:// URL.

More Features

  • Very simple install. Just download the single executable for Linux, Mac or Windows and run it. Minimal dependencies, no installers, no package managers, no external libraries. Suitable for development and production servers.
  • Server side scripts can access details about the WebSocket HTTP request (e.g. remote host, query parameters, cookies, path, etc) via standard CGI environment variables.
  • As well as serving websocket daemons it also includes a static file server and classic CGI server for convenience.
  • Command line help available via websocketd --help.
  • Includes WebSocket developer console to make it easy to test your scripts before you've built a JavaScript frontend.
  • Examples in many programming languages are available to help you getting started.

User Manual

More documentation in the user manual

Example Projects

Got more examples? Open a pull request.

My Other Projects

And follow @joewalnes!

URL: websocketd/README.md

Suggested labels

{'label-name': 'WebSocket-Server', 'label-description': 'Tools and applications for creating WebSocket servers easily without the need for networking libraries.', 'gh-repo': 'CLI-UX,code-generation,Git-Repo', 'confidence': 52.21}

@irthomasthomas irthomasthomas added CLI-UX Command Line Interface user experience and best practices code-generation code generation models and tools like copilot and aider Git-Repo Source code repository like gitlab or gh New-Label Choose this option if the existing labels are insufficient to describe the content accurately labels Mar 16, 2024
@irthomasthomas
Copy link
Owner Author

Related content

#746

Similarity score: 0.82

#367

Similarity score: 0.82

#730

Similarity score: 0.82

#543

Similarity score: 0.81

#656

Similarity score: 0.81

@irthomasthomas irthomasthomas changed the title websocketd/README.md at master · joewalnes/websocketd websocketd - a small command-line tool that will wrap an existing command-line interface program, and allow it to be accessed via a WebSocket. Mar 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLI-UX Command Line Interface user experience and best practices code-generation code generation models and tools like copilot and aider Git-Repo Source code repository like gitlab or gh New-Label Choose this option if the existing labels are insufficient to describe the content accurately
Projects
None yet
Development

No branches or pull requests

1 participant