WebRTCに基づくオーバーレイネットワーク。
weronは、WebRTCに基づく無駄のない高速で安全なオーバーレイネットワークを提供します。
それもあなたを可能にします...
次のようにOCIイメージを取得できます。
$ podman pull ghcr.io/pojntfx/weron
静的バイナリはGitHubリリースで利用できます。
Linuxでは、次のようにインストールできます。
$ curl -L -o /tmp/weron "https://github.com/pojntfx/weron/releases/latest/download/weron.linux-$(uname -m)"
$ sudo install /tmp/weron /usr/local/bin
$ sudo setcap cap_net_admin+ep /usr/local/bin/weron # This allows rootless execution
macOSでは、次を使用できます。
$ curl -L -o /tmp/weron "https://github.com/pojntfx/weron/releases/latest/download/weron.darwin-$(uname -m)"
$ sudo install /tmp/weron /usr/local/bin
Windowsでは、以下が機能するはずです(PowerShellを管理者として使用)。
PS> Invoke-WebRequest https://github.com/pojntfx/weron/releases/latest/download/weron.windows-x86_64.exe -OutFile \Windows\System32\weron.exe
GitHubリリースで、より多くのオペレーティングシステムとアーキテクチャのバイナリを見つけることができます。
TL; DR:ホストされたシグナリングサーバー上のレイヤー3(IP)オーバーレイネットワークに参加し
sudo weron vpn ip --community mycommunity --password mypassword --key mykey --ips 2001:db8::1/32,192.0.2.1/24、レイヤー2(イーサネット)オーバーレイネットワークに参加します。sudo weron vpn ethernet --community mycommunity --password mypassword --key mykey
weron signaler
シグナリングサーバーは、ピア間で接続情報を交換することにより、ピアを相互に接続します。また
--password、クライアントのフラグを介してコミュニティへのアクセスを管理し、すべてのピアが切断された後でも永続的なコミュニティを維持できます。
--keyでホストされているシグナリングサーバーを使用することは可能であり、(TLSに加えて、接続情報はクライアントのフラグを使用して暗号化されます)合理的にプライベートですが、サーバーを
wss://weron.herokuapp.com/自分でホストすることには、待ち時間の短縮やプライバシーの向上など、多くの利点があります。
シグナリングサーバーは、インメモリデータベースまたはRedisとPostgreSQLを備えたインプロセスブローカーを使用できます。本番環境で使用する場合は、後者の構成を強くお勧めします。これにより、シグナリングサーバーを水平方向に簡単に拡張できます。これは、サーバーインフラストラクチャを複数の大陸にまたがって拡張する場合に特に重要です。これは、クラウド内バックボーンは通常、常駐接続よりもレイテンシが低く、ピアを相互に接続するために必要な時間を短縮するためです。
$ sudo podman network create weron
$ sudo podman run -d --restart=always --label "io.containers.autoupdate=image" --name weron-postgres --network weron -e POSTGRES_HOST_AUTH_METHOD=trust -e POSTGRES_DB=weron_communities postgres
$ sudo podman generate systemd --new weron-postgres | sudo tee /lib/systemd/system/weron-postgres.service
$ sudo podman run -d --restart=always --label "io.containers.autoupdate=image" --name weron-redis --network weron redis
$ sudo podman generate systemd --new weron-redis | sudo tee /lib/systemd/system/weron-redis.service
$ sudo podman run -d --restart=always --label "io.containers.autoupdate=image" --name weron-signaler --network weron -p 1337:1337 -e DATABASE_URL='postgres://[email protected]:5432/weron_communities?sslmode=disable' -e REDIS_URL='redis://weron-redis:6379/1' -e API_PASSWORD='myapipassword' ghcr.io/pojntfx/weron:unstable weron signaler
$ sudo podman generate systemd --new weron-signaler | sudo tee /lib/systemd/system/weron-signaler.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now weron-postgres
$ sudo systemctl enable --now weron-redis
$ sudo systemctl enable --now weron-signaler
$ sudo firewall-cmd --permanent --add-port=1337/tcp
$ sudo firewall-cmd --reload
sudo podman run -d --restart=always --label "io.containers.autoupdate=image" --name weron-postgres -e POSTGRES_HOST_AUTH_METHOD=trust -e POSTGRES_DB=weron_communities -p 127.0.0.1:5432:5432 postgres
sudo podman generate systemd --new weron-postgres | sudo tee /lib/systemd/system/weron-postgres.service
sudo podman run -d --restart=always --label "io.containers.autoupdate=image" --name weron-redis -p 127.0.0.1:6379:6379 redis
sudo podman generate systemd --new weron-redis | sudo tee /lib/systemd/system/weron-redis.service
sudo tee /etc/systemd/system/weron-signaler.service<<'EOT'
[Unit]
Description=weron Signaling Server
After=weron-postgres.service weron-redis.service
[Service]
ExecStart=/usr/local/bin/weron signaler --verbose=7
Environment="DATABASE_URL=postgres://[email protected]:5432/weron_communities?sslmode=disable"
Environment="REDIS_URL=redis://localhost:6379/1"
Environment="API_PASSWORD=myapipassword"
[Install]
WantedBy=multi-user.target
EOT
sudo systemctl daemon-reload
sudo systemctl restart weron-postgres
sudo systemctl restart weron-redis
sudo systemctl restart weron-signaler
sudo firewall-cmd --permanent --add-port=1337/tcp
sudo firewall-cmd --reload
これで、に到達できるはず
ws://localhost:1337/です。
本番環境で使用するには、このシグナリングサーバーをCaddyやTraefikなどのTLS対応のリバースプロキシの背後に配置します。
API_PASSWORD空のままにして管理APIを完全に無効にするか、代わりにOpenIDConnectを使用して認証することもできます。詳細については、シグナリングサーバーリファレンスを参照してください。Go APIを使用して、独自のアプリケーションにシグナリングサーバーを埋め込むこともできます。
weron manager
いかなる種類の許可もなしにシグナリングサーバー上に外部コミュニティを作成することは可能ですが、ほとんどのアプリケーションに対して永続的なコミュニティを作成することをお勧めします。クライアントが参加または離脱すると、外部コミュニティが自動的に作成および削除されます。永続コミュニティが自動的に削除されることはありません。これらのコミュニティは、マネージャーCLIを使用して管理できます。
セルフホストのシグナリングサーバーで作業する場合は、最初にリモートアドレスを設定します。
$ export WERON_RADDR='http://localhost:1337/'
次に、
API_PASSWORDenv変数を使用してAPIパスワードを設定します。
$ export API_PASSWORD='myapipassword'
OIDCを使用して認証する場合は、代わりに次のようにgoitを使用してAPIパスワードを設定できます。
$ export OIDC_CLIENT_ID='Ab7OLrQibhXUzKHGWYDFieLa2KqZmFzb' OIDC_ISSUER='https://pojntfx.eu.auth0.com/' OIDC_REDIRECT_URL='http://localhost:11337'
$ export API_KEY="$(goit)"
ここでコミュニティを一覧表示すると、現在コミュニティが存在しないことがわかります。
$ weron manager list
id,clients,persistent
以下を使用して永続的なコミュニティを作成できます
weron create。
$ weron manager create --community mycommunity --password mypassword
id,clients,persistent
mycommunity,0,true
を使用してコミュニティを削除することもできます。これにより
weron delete、参加しているすべてのピアが切断されます。
$ weron manager delete --community mycommunity
詳細については、マネージャーリファレンスを参照してください。Go APIを使用して、独自のアプリケーションにマネージャーを埋め込むこともできます。
weron chat
セルフホストのシグナリングサーバーで作業する場合は、最初にリモートアドレスを設定します。
$ export WERON_RADDR='ws://localhost:1337/'
チャットは、すべてが正しく機能しているかどうかをテストする簡単な方法です。チャットルームに参加するには、次のコマンドを実行します。
$ weron chat --community mycommunity --password mypassword --key mykey --names user1,user2,user3 --channels one,two,three
別のピアで、次を実行します(シグナリングサーバーがパブリックの場合、これは地球上のどこでも実行できます)。
$ weron chat --community mycommunity --password mypassword --key mykey --names user1,user2,user3 --channels one,two,three
.wss://weron.herokuapp.com/
user2!
[email protected]
[email protected]
[email protected]
user2>
これで、メッセージの送受信を開始したり、チャットルームに新しいピアを追加してネットワークをテストしたりできます。
詳細については、チャットリファレンスを参照してください。Go APIを使用して、チャットを独自のアプリケーションに埋め込むこともできます。
weron utility latency
ネットワークの洞察に満ちたメトリックは、このユーティリティで測定できる遅延です。これをと考えて
pingください。ただし、WebRTCの場合です。まず、次のようにレイテンシ測定サーバーを起動します。
$ weron utility latency --community mycommunity --password mypassword --key mykey --server
別のピアで、クライアントを起動します。クライアントは、すぐに遅延の測定を開始する必要があります。を押しCTRL Cて停止し、合計統計を取得します。
$ weron utility latency --community mycommunity --password mypassword --key mykey
# ...
128 B written and acknowledged in 110.111µs
128 B written and acknowledged in 386.12µs
128 B written and acknowledged in 310.458µs
128 B written and acknowledged in 335.341µs
128 B written and acknowledged in 264.149µs
^CAverage latency: 281.235µs (5 packets written) Min: 110.111µs Max: 386.12µs
詳細については、レイテンシ測定ユーティリティリファレンスを参照してください。Go APIを使用して、独自のアプリケーションにユーティリティを埋め込むこともできます。
weron utility throughput
大量のデータを転送する場合は、ネットワークのスループットが重要な特性です。このユーティリティを使用すると、2つのノード間でこのメトリックを測定できます。と考えて
iperfください。ただし、WebRTCの場合です。まず、次のようにスループット測定サーバーを起動します。
$ weron utility throughput --community mycommunity --password mypassword --key mykey --server
別のピアで、クライアントを起動します。クライアントは、スループットの測定をすぐに開始する必要があります。を押しCTRL Cて停止し、合計統計を取得します。
$ weron utility throughput --community mycommunity --password mypassword --key mykey
# ...
97.907 MB/s (783.253 Mb/s) (50 MB read in 510.690403ms)
64.844 MB/s (518.755 Mb/s) (50 MB read in 771.076908ms)
103.360 MB/s (826.881 Mb/s) (50 MB read in 483.745832ms)
89.335 MB/s (714.678 Mb/s) (50 MB read in 559.692495ms)
85.582 MB/s (684.657 Mb/s) (50 MB read in 584.233931ms)
^CAverage throughput: 74.295 MB/s (594.359 Mb/s) (250 MB written in 3.364971672s) Min: 64.844 MB/s Max: 103.360 MB/s
詳細については、スループット測定ユーティリティリファレンスを参照してください。Go APIを使用して、独自のアプリケーションにユーティリティを埋め込むこともできます。
weron vpn ip
複数のノードをオーバーレイネットワークに参加させる場合は、IPVPNが最適です。これは、Tailscale / WireGuardと同じように機能し、CIDR表記からIPアドレスを動的に割り当てるか、静的に割り当てることができます。Windowsでは、必ず最初にTAP-Windowsをインストールしてください。開始するには、最初のピアでVPNを起動します。
$ sudo weron vpn ip --community mycommunity --password mypassword --key mykey --ips 2001:db8::1/64,192.0.2.1/24
{"level":"info","addr":"wss://weron.herokuapp.com/","time":"2022-05-06T22:20:51+02:00","message":"Connecting to signaler"}
{"level":"info","id":"[\"2001:db8::6a/64\",\"192.0.2.107/24\"]","time":"2022-05-06T22:20:56+02:00","message":"Connected to signaler"}
別のピアで、VPNも起動します。
$ sudo weron vpn ip --community mycommunity --password mypassword --key mykey --ips 2001:db8::1/64,192.0.2.1/24
{"level":"info","addr":"wss://weron.herokuapp.com/","time":"2022-05-06T22:22:30+02:00","message":"Connecting to signaler"}
{"level":"info","id":"[\"2001:db8::b9/64\",\"192.0.2.186/24\"]","time":"2022-05-06T22:22:36+02:00","message":"Connected to signaler"}
{"level":"info","id":"[\"2001:db8::6a/64\",\"192.0.2.107/24\"]","time":"2022-05-06T22:22:36+02:00","message":"Connected to peer"}
これで、ピア間で通信できます。
$ ping 2001:db8::b9
PING 2001:db8::b9(2001:db8::b9) 56 data bytes
64 bytes from 2001:db8::b9: icmp_seq=1 ttl=64 time=1.07 ms
64 bytes from 2001:db8::b9: icmp_seq=2 ttl=64 time=1.36 ms
64 bytes from 2001:db8::b9: icmp_seq=3 ttl=64 time=1.20 ms
64 bytes from 2001:db8::b9: icmp_seq=4 ttl=64 time=1.10 ms
^C
--- 2001:db8::b9 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 1.066/1.180/1.361/0.114 ms
ネットワーク接続を一時的に失うと、ネットワークトポロジが変更されるなど、自動的に再接続されます。macOSなどの独自のオペレーティングシステムの詳細と制限については、IPVPNリファレンスを参照してください。Go APIを使用して、独自のアプリケーションにユーティリティを埋め込むこともできます。
weron vpn ethernet
より柔軟性が必要な場合、または非IPネットワークで作業する場合は、イーサネットVPNが適しています。
n2nまたはZeroTierと同じように機能します。APIの制限により、このVPNタイプはmacOSでは使用できません。代わりに、自由を尊重するコンピューターであるAsahi Linuxまたはレイヤー3(IP)VPNを使用してください。開始するには、最初のピアでVPNを起動します。
$ sudo weron vpn ethernet --community mycommunity --password mypassword --key mykey
{"level":"info","addr":"wss://weron.herokuapp.com/","time":"2022-05-06T22:42:10+02:00","message":"Connecting to signaler"}
{"level":"info","id":"fe:60:a5:8b:81:36","time":"2022-05-06T22:42:11+02:00","message":"Connected to signaler"}
TAPインターフェイスにIPアドレスを追加する場合は、
iproute2またはOSツールを使用して追加します。
$ sudo ip addr add 192.0.2.1/24 dev tap0
$ sudo ip addr add 2001:db8::1/32 dev tap0
別のピアで、VPNも起動します。
$ sudo weron vpn ethernet --community mycommunity --password mypassword --key mykey
{"level":"info","addr":"wss://weron.herokuapp.com/","time":"2022-05-06T22:52:56+02:00","message":"Connecting to signaler"}
{"level":"info","id":"b2:ac:ae:b6:32:8c","time":"2022-05-06T22:52:57+02:00","message":"Connected to signaler"}
{"level":"info","id":"fe:60:a5:8b:81:36","time":"2022-05-06T22:52:57+02:00","message":"Connected to peer"}
そして、IPアドレスを追加します。
$ sudo ip addr add 192.0.2.2/24 dev tap0
$ sudo ip addr add 2001:db8::2/32 dev tap0
これで、ピア間で通信できます。
$ ping 2001:db8::2
PING 2001:db8::2(2001:db8::2) 56 data bytes
64 bytes from 2001:db8::2: icmp_seq=1 ttl=64 time=1.20 ms
64 bytes from 2001:db8::2: icmp_seq=2 ttl=64 time=1.14 ms
64 bytes from 2001:db8::2: icmp_seq=3 ttl=64 time=1.24 ms
^C
--- 2001:db8::2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 1.136/1.193/1.239/0.042 ms
ネットワーク接続を一時的に失うと、ネットワークトポロジが変更されるなど、自動的に再接続されます。Go APIを使用して、独自のアプリケーションにユーティリティを埋め込むこともできます。
wrtcconn
PeerJSの動作と同様に、weronを使用して独自の分散アプリケーションを構築することはほとんど簡単です。簡単なエコーの例の背後にあるコアロジックは次のとおりです。
// ...
for {
select {
case id := <-ids:
log.Println("Connected to signaler", id)
case peer := <-adapter.Accept():
log.Println("Connected to peer", peer.PeerID, "and channel", peer.ChannelID)
go func() {
defer func() {
log.Println("Disconnected from peer", peer.PeerID, "and channel", peer.ChannelID)
}()
reader := bufio.NewScanner(peer.Conn)
for reader.Scan() {
log.Printf("%s", reader.Bytes())
}
}()
go func() {
for {
if _, err := peer.Conn.Write([]byte("Hello!\n")); err != nil {
return
}
time.Sleep(time.Second)
}
}()
}
}
最小アダプターまたは名前付きアダプターのいずれかを使用できます。後者はピア間でユーザー名をネゴシエートしますが、前者は重複をチェックしません。詳細については、Go APIを確認し、パッケージ内の他のユーティリティとサービスの例を確認してください。
$ weron --help
Overlay networks based on WebRTC.
Find more information at:
https://github.com/pojntfx/weron
Usage:
weron [command]
Available Commands:
chat Chat over the overlay network
completion Generate the autocompletion script for the specified shell
help Help about any command
manager Manage a signaling server
signaler Start a signaling server
utility Utilities for overlay networks
vpn Join virtual private networks built on overlay networks
Flags:
-h, --help help for weron
-v, --verbose int Verbosity level (0 is disabled, default is info, 7 is trace) (default 5)
Use "weron [command] --help" for more information about a command.
$ weron signaler --help
Start a signaling server
Usage:
weron signaler [flags]
Aliases:
signaler, sgl, s
Flags:
--api-password string Password for the management API (can also be set using the API_PASSWORD env variable). Ignored if any of the OIDC parameters are set.
--api-username string Username for the management API (can also be set using the API_USERNAME env variable). Ignored if any of the OIDC parameters are set. (default "admin")
--cleanup (Warning: Only enable this after stopping all other servers accessing the database!) Remove all ephermal communities from database and reset client counts before starting
--ephermal-communities Enable the creation of ephermal communities (default true)
--heartbeat duration Time to wait for heartbeats (default 10s)
-h, --help help for signaler
--laddr string Listening address (can also be set using the PORT env variable) (default ":1337")
--oidc-client-id string OIDC Client ID (i.e. myoidcclientid) (can also be set using the OIDC_CLIENT_ID env variable)
--oidc-issuer string OIDC Issuer (i.e. https://pojntfx.eu.auth0.com/) (can also be set using the OIDC_ISSUER env variable)
--postgres-url string URL of PostgreSQL database to use (i.e. postgres://myuser:[email protected]:myport/mydatabase) (can also be set using the DATABASE_URL env variable). If empty, a in-memory database will be used.
--redis-url string URL of Redis database to use (i.e. redis://myuser:[email protected]:myport/1) (can also be set using the REDIS_URL env variable). If empty, a in-process broker will be used.
Global Flags:
-v, --verbose int Verbosity level (0 is disabled, default is info, 7 is trace) (default 5)
$ weron manager --help
Manage a signaling server
Usage:
weron manager [command]
Aliases:
manager, mgr, m
Available Commands:
create Create a persistent community
delete Delete a persistent or ephermal community
list List persistent and ephermal communities
Flags:
-h, --help help for manager
Global Flags:
-v, --verbose int Verbosity level (0 is disabled, default is info, 7 is trace) (default 5)
Use "weron manager [command] --help" for more information about a command.
$ weron chat --help
Chat over the overlay network
Usage:
weron chat [flags]
Aliases:
chat, cht, c
Flags:
--channels strings Comma-separated list of channels in community to join (default [weron/chat/primary])
--community string ID of community to join
--force-relay Force usage of TURN servers
-h, --help help for chat
--ice strings Comma-separated list of STUN servers (in format stun:host:port) and TURN servers to use (in format username:[email protected]:host:port) (i.e. username:[email protected]:global.turn.twilio.com:3478?transport=tcp) (default [stun:stun.l.google.com:19302])
--id-channel string Channel to use to negotiate names (default "weron/chat/id")
--key string Encryption key for community
--kicks duration Time to wait for kicks (default 5s)
--names strings Comma-separated list of names to try and claim one from
--password string Password for community
--raddr string Remote address (default "wss://weron.herokuapp.com/")
--timeout duration Time to wait for connections (default 10s)
Global Flags:
-v, --verbose int Verbosity level (0 is disabled, default is info, 7 is trace) (default 5)
$ weron utility latency --help
Measure the latency of the overlay network
Usage:
weron utility latency [flags]
Aliases:
latency, ltc, l
Flags:
--community string ID of community to join
--force-relay Force usage of TURN servers
-h, --help help for latency
--ice strings Comma-separated list of STUN servers (in format stun:host:port) and TURN servers to use (in format username:[email protected]:host:port) (i.e. username:[email protected]:global.turn.twilio.com:3478?transport=tcp) (default [stun:stun.l.google.com:19302])
--key string Encryption key for community
--packet-length int Size of packet to send and acknowledge (default 128)
--password string Password for community
--pause duration Time to wait before sending next packet (default 1s)
--raddr string Remote address (default "wss://weron.herokuapp.com/")
--server Act as a server
--timeout duration Time to wait for connections (default 10s)
Global Flags:
-v, --verbose int Verbosity level (0 is disabled, default is info, 7 is trace) (default 5)
$ weron utility throughput --help
Measure the throughput of the overlay network
Usage:
weron utility throughput [flags]
Aliases:
throughput, thr, t
Flags:
--community string ID of community to join
--force-relay Force usage of TURN servers
-h, --help help for throughput
--ice strings Comma-separated list of STUN servers (in format stun:host:port) and TURN servers to use (in format username:[email protected]:host:port) (i.e. username:[email protected]:global.turn.twilio.com:3478?transport=tcp) (default [stun:stun.l.google.com:19302])
--key string Encryption key for community
--packet-count int Amount of packets to send before waiting for acknowledgement (default 1000)
--packet-length int Size of packet to send (default 50000)
--password string Password for community
--raddr string Remote address (default "wss://weron.herokuapp.com/")
--server Act as a server
--timeout duration Time to wait for connections (default 10s)
Global Flags:
-v, --verbose int Verbosity level (0 is disabled, default is info, 7 is trace) (default 5)
$ weron vpn ip --help
Join a layer 3 overlay network
Usage:
weron vpn ip [flags]
Aliases:
ip, i
Flags:
--community string ID of community to join
--dev string Name to give to the TAP device (i.e. weron0) (default is auto-generated; only supported on Linux, macOS and Windows)
--force-relay Force usage of TURN servers
-h, --help help for ip
--ice strings Comma-separated list of STUN servers (in format stun:host:port) and TURN servers to use (in format username:[email protected]:host:port) (i.e. username:[email protected]:global.turn.twilio.com:3478?transport=tcp) (default [stun:stun.l.google.com:19302])
--id-channel string Channel to use to negotiate names (default "weron/ip/id")
--ips strings Comma-separated list of IP networks to claim an IP address from and and give to the TUN device (i.e. 2001:db8::1/32,192.0.2.1/24) (on Windows, only one IPv4 and one IPv6 address are supported; on macOS, IPv4 addresses are ignored)
--key string Encryption key for community
--kicks duration Time to wait for kicks (default 5s)
--max-retries int Maximum amount of times to try and claim an IP address (default 200)
--parallel int Amount of threads to use to decode frames (default 8)
--password string Password for community
--raddr string Remote address (default "wss://weron.herokuapp.com/")
--static Try to claim the exact IPs specified in the --ips flag statically instead of selecting a random one from the specified network
--timeout duration Time to wait for connections (default 10s)
Global Flags:
-v, --verbose int Verbosity level (0 is disabled, default is info, 7 is trace) (default 5)
$ weron vpn ethernet --help
Join a layer 2 overlay network
Usage:
weron vpn ethernet [flags]
Aliases:
ethernet, eth, e
Flags:
--community string ID of community to join
--dev string Name to give to the TAP device (i.e. weron0) (default is auto-generated; only supported on Linux, macOS and Windows)
--force-relay Force usage of TURN servers
-h, --help help for ethernet
--ice strings Comma-separated list of STUN servers (in format stun:host:port) and TURN servers to use (in format username:[email protected]:host:port) (i.e. username:[email protected]:global.turn.twilio.com:3478?transport=tcp) (default [stun:stun.l.google.com:19302])
--key string Encryption key for community
--mac string MAC address to give to the TAP device (i.e. 3a:f8:de:7b:ef:52) (default is auto-generated; only supported on Linux)
--parallel int Amount of threads to use to decode frames (default 8)
--password string Password for community
--raddr string Remote address (default "wss://weron.herokuapp.com/")
--timeout duration Time to wait for connections (default 10s)
Global Flags:
-v, --verbose int Verbosity level (0 is disabled, default is info, 7 is trace) (default 5)
上記のすべてのコマンドライン引数は、環境変数を使用して設定することもできます。たとえば、環境変数で設定
--max-retriesするには、を使用します。
300
WERON_MAX_RETRIES=300
貢献するには、GitHubフローを使用し、行動規範に従ってください。
weronの開発バージョンをローカルでビルドして開始するには、次のコマンドを実行します。
$ git clone https://github.com/pojntfx/weron.git
$ cd weron
$ make depend
$ make && sudo make install
$ weron signal # Starts the signaling server
# In another terminal
$ weron chat --raddr ws://localhost:1337 --community mycommunity --password mypassword --key mykey --names user1,user2,user3 --channels one,two,three
# In another terminal
$ weron chat --raddr ws://localhost:1337 --community mycommunity --password mypassword --key mykey --names user1,user2,user3 --channels one,two,three
もちろん、このようなユーティリティやVPNに貢献することもできます。
質問があるか、助けが必要ですか?Matrixでチャットしてください!
weron(c)2022FelicitasPojtingerおよび寄稿者
SPDX-ライセンス-識別子:AGPL-3.0