著者Giuliano氏が、Go言語でLAN内のP2Pマルチノードサービスを実装した自作コードをZennで紹介しています。単一ファイル・外部依存なしという構成で、ノードの自動発見にUDPマルチキャスト、ノード間の実データ転送にTCPを組み合わせる、学習教材的な記事です。
ノード発見はマルチキャストアドレス239.255.42.99のポート9999を使い、各ノードが2秒間隔で「HELLO:<id>:<tcp-port>」形式のビーコンメッセージを配信します。6秒以上応答がないピアは自動的にリストから削除される仕組みです。実装はbroadcastPresence()、listenForPeers()、reapStalePeers()という3つの並行ゴルーチンで構成されており、「peers」コマンドで接続中のピア一覧を確認したり、テキスト入力で全ピアへブロードキャスト送信したりできます。コードはGitHubで公開されています。
出典が伝えている要点
- 著者はGo言語でLAN上のP2Pマルチノードサービスの実装例を作成した
- 実装は単一ファイルで外部依存なしのコードである
- ノード発見にはUDPマルチキャストアドレス239.255.42.99のポート9999を使用している
- ノードは2秒間隔で「HELLO:<id>:<tcp-port>」形式のビーコンメッセージを配信する
- ノード間の実データ転送にはTCP接続を使用している
- 6秒以上応答がないピアは自動的にリストから削除される
- 実装はbroadcastPresence()、listenForPeers()、reapStalePeers()という3つの並行ゴルーチンで構成されている
- ユーザーは「peers」コマンドで接続中のピア一覧を確認できる
- ユーザーはテキストを入力することで接続中の全ピアにブロードキャスト送信できる
- 著者はこの実装のコードをGitHubリポジトリで公開している