{"id":19969773,"url":"https://github.com/ryskiwt/echo","last_synced_at":"2025-09-02T17:12:09.717Z","repository":{"id":144437710,"uuid":"123694648","full_name":"ryskiwt/echo","owner":"ryskiwt","description":"Echo servers implemented in Golang","archived":false,"fork":false,"pushed_at":"2018-03-04T03:40:11.000Z","size":13,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2023-03-21T23:03:27.603Z","etag":null,"topics":["echo","go","golang","quic","tcp","tls","udp","websocket"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ryskiwt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-03-03T13:31:36.000Z","updated_at":"2024-06-19T07:45:55.882Z","dependencies_parsed_at":null,"dependency_job_id":"622e0d45-1dbb-4750-bc10-4dffd50f7c75","html_url":"https://github.com/ryskiwt/echo","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryskiwt%2Fecho","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryskiwt%2Fecho/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryskiwt%2Fecho/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryskiwt%2Fecho/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryskiwt","download_url":"https://codeload.github.com/ryskiwt/echo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241404415,"owners_count":19957655,"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":["echo","go","golang","quic","tcp","tls","udp","websocket"],"created_at":"2024-11-13T02:51:38.812Z","updated_at":"2025-03-01T18:14:10.161Z","avatar_url":"https://github.com/ryskiwt.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"## implemented protocols\n- WebSocket over TLS\n- QUIC (with TLS)\n- TLS over TCP\n- TCP over IPv4 / IPv6\n- UDP over IPv4 / IPv6\n\n## build\n\n```sh\n$ cd xxx # xxx=wss, quic, tls, tcp, udp\n$ go build\n```\n\n## usage\n\n```\n-c \u003cserver address\u003e\n  \tclient mode\n-s \u003cserver address\u003e\n  \tserver mode\n-i \u003cinterval\u003e\n  \tsending interval [ms] *client mode only (default 1000)\n-m \u003cmessage\u003e\n  \tmessage to send (default \"Hello XXX !\")\n-v \u003cversion\u003e\n    IP version *TCP/UDP only (default \"IPv4\")\n-n \u003cstream number\u003e\n    number of parallel streams *QUIC only (default 3)\n```\n\n## WebSocket over TLS\n### server\n\n```sh\n$ ./wss -s 127.0.0.1:18433                                                              +[master]\n[echo-wss]2018/03/02 Listening on 127.0.0.1:18433 ...\n[echo-wss]2018/03/02 Remote peer 127.0.0.1:50401 connected\n[echo-wss]2018/03/02 Server: Got 'Hello WebSocket !'\n[echo-wss]2018/03/02 Server: Got 'Hello WebSocket !'\n[echo-wss]2018/03/02 Server: Got 'Hello WebSocket !'\n[echo-wss]2018/03/02 Remote peer 127.0.0.1:50401 disconnected\n```\n\n### client\n\n```sh\n$ ./wss -c 127.0.0.1:18433                                                              +[master]\n[echo-wss]2018/03/02 Client: Sending 'Hello WebSocket !'\n[echo-wss]2018/03/02 Client: Got 'Hello WebSocket !'\n[echo-wss]2018/03/02 Client: Sending 'Hello WebSocket !'\n[echo-wss]2018/03/02 Client: Got 'Hello WebSocket !'\n[echo-wss]2018/03/02 Client: Sending 'Hello WebSocket !'\n[echo-wss]2018/03/02 Client: Got 'Hello WebSocket !'\n```\n\n## QUIC\n### server\n\n```sh\n$ ./quic -s 127.0.0.1:4242                                                             +[master]\n[echo-quic]2018/03/02 Listening on 127.0.0.1:4242 ...\n[echo-quic]2018/03/02 Remote peer 127.0.0.1:57466 connected\n[echo-quic]2018/03/02 Stream 3 on remote peer 127.0.0.1:57466 opened\n[echo-quic]2018/03/02 Stream 5 on remote peer 127.0.0.1:57466 opened\n[echo-quic]2018/03/02 Server: Got 'Hello QUIC !' on stream 5\n[echo-quic]2018/03/02 Server: Got 'Hello QUIC !' on stream 3\n[echo-quic]2018/03/02 Server: Got 'Hello QUIC !' on stream 5\n[echo-quic]2018/03/02 Server: Got 'Hello QUIC !' on stream 3\n[echo-quic]2018/03/02 Server: Got 'Hello QUIC !' on stream 3\n[echo-quic]2018/03/02 Server: Got 'Hello QUIC !' on stream 5\n[echo-quic]2018/03/02 Stream 3 on remote peer 127.0.0.1:57466 closed\n[echo-quic]2018/03/02 Stream 5 on remote peer 127.0.0.1:57466 closed\n[echo-quic]2018/03/02 Remote peer 127.0.0.1:57466 disconnected\n```\n\n### client\n\n```sh\n$ ./quic -c 127.0.0.1:4242 -n 2                                                        +[master]\n[echo-quic]2018/03/02 Client: Sending 'Hello QUIC !' on stream 5\n[echo-quic]2018/03/02 Client: Sending 'Hello QUIC !' on stream 3\n[echo-quic]2018/03/02 Client: Got 'Hello QUIC !' on stream 3\n[echo-quic]2018/03/02 Client: Got 'Hello QUIC !' on stream 5\n[echo-quic]2018/03/02 Client: Sending 'Hello QUIC !' on stream 3\n[echo-quic]2018/03/02 Client: Sending 'Hello QUIC !' on stream 5\n[echo-quic]2018/03/02 Client: Got 'Hello QUIC !' on stream 5\n[echo-quic]2018/03/02 Client: Got 'Hello QUIC !' on stream 3\n[echo-quic]2018/03/02 Client: Sending 'Hello QUIC !' on stream 3\n[echo-quic]2018/03/02 Client: Sending 'Hello QUIC !' on stream 5\n[echo-quic]2018/03/02 Client: Got 'Hello QUIC !' on stream 3\n[echo-quic]2018/03/02 Client: Got 'Hello QUIC !' on stream 5\n```\n\n## TLS\n### server\n\n```sh\n$ ./tls -s :18433 -v IPv4                                                               +[master]\n[echo-tls]2018/03/02 Listening on :18433 ...\n[echo-tls]2018/03/02 Remote peer 127.0.0.1:50449 connected\n[echo-tls]2018/03/02 Server: Got 'Hello TLS !'\n[echo-tls]2018/03/02 Server: Got 'Hello TLS !'\n[echo-tls]2018/03/02 Server: Got 'Hello TLS !'\n[echo-tls]2018/03/02 Remote peer 127.0.0.1:50449 disconnected\n```\n\n### client\n\n```sh\n$ ./tls -c :18433 -v IPv4                                                               +[master]\n[echo-tls]2018/03/02 Client: Sending 'Hello TLS !'\n[echo-tls]2018/03/02 Client: Got 'Hello TLS !'\n[echo-tls]2018/03/02 Client: Sending 'Hello TLS !'\n[echo-tls]2018/03/02 Client: Got 'Hello TLS !'\n[echo-tls]2018/03/02 Client: Sending 'Hello TLS !'\n[echo-tls]2018/03/02 Client: Got 'Hello TLS !'\n```\n\n## TCP\n### server\n\n```sh\n$ ./tcp -s [::]:8080 -v IPv6                                                            +[master]\n[echo-tcp]2018/03/02 Listening on [::]:8080 ...\n[echo-tcp]2018/03/02 Remote peer [::1]:50460 connected\n[echo-tcp]2018/03/02 Server: Got 'Hello TCP !'\n[echo-tcp]2018/03/02 Server: Got 'Hello TCP !'\n[echo-tcp]2018/03/02 Server: Got 'Hello TCP !'\n[echo-tcp]2018/03/02 Remote peer [::1]:50460 disconnected\n```\n\n### client\n\n```sh\n$ ./tcp -c [::]:8080 -v IPv6                                                            +[master]\n[echo-tcp]2018/03/02 Client: Sending 'Hello TCP !'\n[echo-tcp]2018/03/02 Client: Got 'Hello TCP !'\n[echo-tcp]2018/03/02 Client: Sending 'Hello TCP !'\n[echo-tcp]2018/03/02 Client: Got 'Hello TCP !'\n[echo-tcp]2018/03/02 Client: Sending 'Hello TCP !'\n[echo-tcp]2018/03/02 Client: Got 'Hello TCP !'\n```\n\n## UDP\n### server\n\n```sh\n$ ./udp -s :8080 -v IPv6                                                                +[master]\n[echo-udp]2018/03/02 Listening on :8080 ...\n[echo-udp]2018/03/02 Server: Got 'Hello UDP !' from remote peer [::1]:63635\n[echo-udp]2018/03/02 Server: Got 'Hello UDP !' from remote peer [::1]:63635\n[echo-udp]2018/03/02 Server: Got 'Hello UDP !' from remote peer [::1]:63635\n```\n\n### client\n\n```sh\n$ ./udp -c :8080 -v IPv6                                                                +[master]\n[echo-udp]2018/03/02 Client: Sending 'Hello UDP !'\n[echo-udp]2018/03/02 Client: Got 'Hello UDP !'\n[echo-udp]2018/03/02 Client: Sending 'Hello UDP !'\n[echo-udp]2018/03/02 Client: Got 'Hello UDP !'\n[echo-udp]2018/03/02 Client: Sending 'Hello UDP !'\n[echo-udp]2018/03/02 Client: Got 'Hello UDP !'\n```\n\n## memo\n### cert creation\n\n```sh\n$ openssl genrsa 2048 \u003e server.key\n$ openssl req -new -key server.key \u003e server.csr\n$ openssl x509 -days 3650 -req -signkey server.key \u003c server.csr \u003e server.crt\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryskiwt%2Fecho","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryskiwt%2Fecho","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryskiwt%2Fecho/lists"}