- 使用言語: Go 1.20
- 推奨環境: Docker + makeコマンド
make up: Docker Composeで開発環境を起動する- Server×5が同じネットワーク内に起動する
- Client実行用コンテナが同じネットワーク内に起動する
make down:make upで建てた開発環境を停止する- Server×5が停止する
- Client実行用コンテナが停止する
make client: Clientをインタラクティブモードで起動する
ネットワーク構成
| Server | Address |
|---|---|
| node01 | 172.26.250.11:8000 |
| node02 | 172.26.250.12:8000 |
| node03 | 172.26.250.13:8000 |
| node04 | 172.26.250.14:8000 |
| node05 | 172.26.250.15:8000 |
コマンドオプション
> go run cmd/server/main.go --help
-d, --delay float Mean delay of communication channel
-h, --host string Host name (default "localhost")
-l, --loss float Loss rate of communication channel
-n, --name string Name of this node (default "node")
-p, --port string Port to listen (default "8080")
--seed int Random seed
-s, --server string Server address to join P2P network起動例 (サーバ5台でシステムを構成する場合):
- Node 1:
go run cmd/server/main.go --port 8001 --name node01- サーバネットワークを構成する最初の1台 (
node01) を起動
- サーバネットワークを構成する最初の1台 (
- Node 2:
go run cmd/server/main.go --port 8002 --name node02 --server localhost:8001- 新しい名前 (
node02) でサーバを起動し,Node 1へ接続する
- 新しい名前 (
- Node 3:
go run cmd/server/main.go --port 8003 --name node03 --server localhost:8001- 新しい名前 (
node03) でサーバを起動し,Node 1へ接続する
- 新しい名前 (
- Node 4:
go run cmd/server/main.go --port 8004 --name node04 --server localhost:8001- 新しい名前 (
node04) でサーバを起動し,Node 1へ接続する
- 新しい名前 (
- Node 5:
go run cmd/server/main.go --port 8005 --name node05 --server localhost:8001- 新しい名前 (
node05) でサーバを起動し,Node 1へ接続する
- 新しい名前 (
【注意】
- 別のアドレスを持つ同名のサーバは接続できない
- Node 2~5はNode 1への接続することで自動的に相互接続されるよう設計されているが,稀に失敗する
コマンドオプション
> go run cmd/client/main.go --help
-e, --exec string Execute the given command directly instead of interactive mode起動例:
- インタラクティブモード:
go run cmd/client/main.go- 起動すると
command ?を表示し,入力待機状態になる. - コマンド例:
state localhost:8001=localhost:8001に対し内部状態を問い合わせる
- 起動すると
- コマンドの直接実行:
go run cmd/client/main.go --exec "state localhost:8001"--execオプションでコマンド単発実行が可能