{"id":17053918,"url":"https://github.com/vertexclique/ringbahn","last_synced_at":"2025-04-12T16:50:41.407Z","repository":{"id":57544193,"uuid":"76234588","full_name":"vertexclique/ringbahn","owner":"vertexclique","description":"High performance multiple backend web server","archived":false,"fork":false,"pushed_at":"2016-12-29T19:08:59.000Z","size":115,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-26T11:11:18.250Z","etag":null,"topics":["cowboy","elixir","ringbahn","webserver","zmq"],"latest_commit_sha":null,"homepage":"","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vertexclique.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}},"created_at":"2016-12-12T07:56:38.000Z","updated_at":"2024-12-19T02:41:05.000Z","dependencies_parsed_at":"2022-09-16T23:01:37.960Z","dependency_job_id":null,"html_url":"https://github.com/vertexclique/ringbahn","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vertexclique%2Fringbahn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vertexclique%2Fringbahn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vertexclique%2Fringbahn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vertexclique%2Fringbahn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vertexclique","download_url":"https://codeload.github.com/vertexclique/ringbahn/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248601218,"owners_count":21131607,"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":["cowboy","elixir","ringbahn","webserver","zmq"],"created_at":"2024-10-14T10:13:37.870Z","updated_at":"2025-04-12T16:50:41.388Z","avatar_url":"https://github.com/vertexclique.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Ringbahn](http://i.imgur.com/9dIl75w.png)\n### High performance multiple backend web server\n\n[![Build Status](https://travis-ci.org/vertexclique/ringbahn.svg?branch=master)](https://travis-ci.org/vertexclique/ringbahn) [![Hex.pm](https://img.shields.io/hexpm/v/ringbahn.svg)](https://hex.pm/packages/ringbahn) [![Hex.pm](https://img.shields.io/hexpm/dt/ringbahn.svg)](https://hex.pm/packages/ringbahn) [![Coverage Status](https://coveralls.io/repos/github/vertexclique/ringbahn/badge.svg)](https://coveralls.io/github/vertexclique/ringbahn) [![Deps Status](https://beta.hexfaktor.org/badge/all/github/vertexclique/ringbahn.svg)](https://beta.hexfaktor.org/github/vertexclique/ringbahn) [![Hex.pm](https://img.shields.io/hexpm/l/ringbahn.svg)](https://hex.pm/packages/ringbahn)\n\n## Requirements\n\n* Erlang/OTP 19\n* Elixir 1.3.4\n* Mix 1.3.4\n\n## Running\n\nInstall elixir and mix:\n```\n$ brew install elixir\n```\n\nInstall project dependencies with:\n```\n$ mix deps.get\n```\n\nStart with internal default conf:\n```\n$ mix run --no-halt\n```\n\nStart with external conf\n```\n$ mix escript.build\n$ ./ringbahn --config=../some_config_dir/config.ring.json\n```\n\nFor debugging use iex\n```\niex -S mix\n```\n\n[![asciicast](https://asciinema.org/a/97359.png)](https://asciinema.org/a/97359)\n\n_We are at an early development stage, please use it with caution._\n\n# Configuration\n\nBy default Ringbahn uses json files for configuration.\nTo distinguish between other json files please prefer using `.ring.json` extension.\nIt may use templating support later on... (with EEx or any other choice)\n\nExample configuration is like:\n\n```json\n{\n    \"settings\": {\n        \"backend\": \"ZMQ\",                  # Defines the backend interface to talk with handlers\n        \"worker_count\": 4,                 # Defines how many internal processes should be started\n        \"port_offset\": 100,                # Defines the intervals for instance ports\n        \"disable_access_logging\": true     # Disables access logging (Not Implemented)\n    },\n    \"static_dir\": {                        # Static DIR serving (Not implemented)\n        \"base\": \"public\",\n        \"index_file\": \"index.html\",\n        \"default_ctype\": \"text/plain\"\n    },\n    \"server\": {\n        \"pid_file\": \"/run/ringbahn.pid\",                                 # PID file (Not Implemented)\n        \"uuid\": \"edc0a43a-9d93-4d3d-93db-94c3a581ab17\",                  # Ringbahn Server UUID (will be muxed by worker_count)\n        \"access_log\": \"/log/access.log\",                                 # Access log file basename (Not Implemented)\n        \"error_log\": \"/log/error.log\",                                   # Error log file basename (Not Implemented)\n        \"port\": 6767,                                                    # Starting port for server endpoint (will be muxed by port_offset)\n        \"default_host\": \"localhost\",                                     # Default host name for serving through...\n        \"hosts\": {                                                       # Every host declaration goes inside of this\n            \"localhost\": [                                               # Route declarations goes inside of this host\n                {\n                    \"route\": \"/test\",                                    # Route that will be handled\n                    \"send_spec\": \"127.0.0.1\",                            # Send address that will be used to send incoming request to handlers\n                    \"send_port\": 10000,                                  # Port that will be used for send\n                    \"send_ident\": \"f983c23e-9058-4c9c-56ec-7f9f9a34c9ma\",# Identifier for sender server process group\n                    \"recv_spec\": \"127.0.0.1\",                            # Receive address that will be used for receiving responses from handlers\n                    \"recv_port\": 10001,                                  # Port that will be used for receive\n                    \"recv_ident\": \"t3ok87np-9058-4c9c-9treu-7f9f9a34c9ka\"# Identifier for receiver server process group\n                }\n            ]\n        }\n    }\n}\n```\n\nIn depth documentation is available in project page:\nhttp://vertexclique.github.io/ringbahn\n\n## TODOs\n\n* Regex in urls and globbing\n* Make kernel polling if it is available.\n* Remove nasty dialyzer errors.\n* Declare type specs. [ONGOING]\n* Write more tests. [ONGOING]\n* Access log, Error log support.\n* Pidfile watching, fsevents.\n* Implement Protobuf backend.\n* Autogen UUID4s.\n* Static DIR serving.\n\n## Benchmarks\n\nBenchmarks are in `benchmark` directory. It will be organized when new backends kicked in by time.\nPlease head to the README of benchmarks for more info.\n\n\u003csub\u003e\u003csup\u003eRingbahn über Ostkreuz\u003c/sup\u003e\u003c/sub\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvertexclique%2Fringbahn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvertexclique%2Fringbahn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvertexclique%2Fringbahn/lists"}