{"id":15914390,"url":"https://github.com/bbengfort/ramble","last_synced_at":"2025-07-19T08:33:43.858Z","repository":{"id":69222765,"uuid":"141484567","full_name":"bbengfort/ramble","owner":"bbengfort","description":"A streaming gRPC point to point chat system","archived":false,"fork":false,"pushed_at":"2018-07-23T20:33:46.000Z","size":82,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-03T03:28:57.243Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bbengfort.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-07-18T20:06:53.000Z","updated_at":"2020-08-28T10:25:32.000Z","dependencies_parsed_at":"2023-04-09T03:15:37.451Z","dependency_job_id":null,"html_url":"https://github.com/bbengfort/ramble","commit_stats":{"total_commits":9,"total_committers":1,"mean_commits":9.0,"dds":0.0,"last_synced_commit":"fc7efbb0185bff4c26186d8fcb8c020457921ffc"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bbengfort/ramble","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbengfort%2Framble","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbengfort%2Framble/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbengfort%2Framble/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbengfort%2Framble/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bbengfort","download_url":"https://codeload.github.com/bbengfort/ramble/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbengfort%2Framble/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265905104,"owners_count":23846696,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-06T17:02:10.231Z","updated_at":"2025-07-19T08:33:43.802Z","avatar_url":"https://github.com/bbengfort.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ramble\n\n**A streaming gRPC point to point chat system.**\n\nThis app is a quick proof of concept for a bidirectional streaming service using gRPC. The app implements both a chat server and a chat client. Note that this really is only proof of concept code; if you're interested check out `ramble.go` and the protobuf definition in `pb/chat.proto`. Almost everything else is me fumbling around with making a terminal UI.\n\n## Connecting to a Chat\n\nTo install ramble, first `go get` the project:\n\n```\n$ go get github.com/bbengfort/ramble/...\n```\n\nIf you have placed `$GOPATH/bin` in your `$PATH` you should now be able to lookup `ramble` directly; otherwise, `cd $GOPATH/src/github.com/bbengfort/ramble` and run `make install`. Once ramble is connected to your path, you can enter the chat client as follows:\n\n```\n$ ramble chat -n username -a 192.168.1.1:3265\n```\n\nReplacing `username` with the name you wish to be identified as, and `192.168.1.1:3265` with the address of the chat server. You should now be connected to the chat and see a terminal UI.\n\nIn order to start chatting, press the `TAB` button to enter the chat window; you can then type your message and press `ENTER` to send it. If you hit tab again, you'll be taken to the message history window, which will allow you to scroll through messages. Note that the chat history only keeps 150 of the most recent messages in memory at a time. To quit, use `CTRL+C`.\n\n![Ramble Chat](https://user-images.githubusercontent.com/745966/43095401-b3b5edf2-8e83-11e8-8824-cb1de9409bd5.png)\n\n## Benchmarks\n\n![Benchmark](fixtures/benchmark.png)\n\nRan the benchmarks with N clients on my MacBook Pro sending 5000 messages to a chat server on Nevis - an Ubuntu server on the local area network. Throughput is defined as the total number of messages sent divided by the time it took all N clients to send all messages, which simultaneously receiving messages from the channel. \n\n## Running a Server\n\nRunning the server is as simple as running:\n\n```\n$ ramble serve -p 3265\n```\n\nReplacing 3265 with the port you'd like the server to listen for chat messages on (the default is 3265).\n\nOf course, things get more complicated when deploying a server to run as a long running-service. Instructions for deploying the chat server as a systemd service on Ubuntu follow.\n\n### Ubuntu systemd service\n\nRamble is set up to use systemd, following the instructions from [_GoLang: Running a Go binary as a systemd service on Ubuntu 16.04_](https://fabianlee.org/2017/05/21/golang-running-a-go-binary-as-a-systemd-service-on-ubuntu-16-04/)\n\nClone the repository to your `$GOPATH` and change directories into the project directory. If you have already run `go get`, then make sure that the binary in `$GOPATH/bin` is symlinked to `/usr/local/bin/ramble`, otherwise run `make install` to build the binary in this location.\n\nAfter installing ramble, create the ramble service user and move the systemd unit service file to the correct location:\n\n```\n$ sudo useradd ramble -s /sbin/nologin -M\n$ sudo cp conf/ramble.service /lib/systemd/system/\n$ sudo chmod 755 /lib/systemd/system/ramble.service\n```\n\nAt this point you should be able to enable the service, start it, then monitor the logs using journalctl.\n\n```\n$ sudo systemctl enable ramble.service\n```\n\nTo save the logs using syslog, writing to `/var/log/ramble/ramble.log`, we can configure rsyslog (for more see [_Ubuntu: Enabling syslog on Ubuntu and custom templates_](https://fabianlee.org/2017/05/24/ubuntu-enabling-syslog-on-ubuntu-hosts-and-custom-templates/)). First, edit `/etc/rsyslog.conf` and uncomment the lines below which tell the server to listen for syslog messages on port 514:\n\n```\nmodule(load=\"imtcp\")\ninput(type=\"imtcp\" port=\"514\")\n```\n\nThen create `/etc/rsyslog.d/30-ramble.conf` with the following content:\n\n```\nif $programname == 'ramble' or $syslogtag == 'ramble' then /var/log/ramble/ramble.log\n\u0026 stop\n```\n\nRestart the rsyslog service and the ramble service.\n\n```\n$ sudo systemctl restart rsyslog\n$ sudo systemctl restart ramble\n```\n\nYou should now see log messages appearing when chats are sent!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbbengfort%2Framble","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbbengfort%2Framble","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbbengfort%2Framble/lists"}