このリポジトリをクローンします
リポジトリをマウントし、このコマンドを実行して依存関係をインストールします
make setup
make run
localhost:8080で実行されますサーバーを実行した後、WebSocketクライアントを開きます。持っていない場合は、ChromeのWebsocket King Extensionを試してください。
ws://localhost:8080/socketに接続すると、サーバーに迎えられます。
Server: Welcome! Your ID is f0ab664a-5af3-4f8d-8afe-eb93085267e4
{
"action": "subscribe",
"topic": "world"
}
{
"action": "publish",
"topic": "world",
"message": "Hello world!"
}
{
"action": "unsubscribe",
"topic": "world"
}
「REST APIの代わりにWebsocketを使用する必要があるのはなぜですか」と尋ねているかもしれません。
REST APIは、リクエストごとに1回のみ応答を送信できるHTTPを使用します。
一方、WebSocketは、毎回接続を再確立する必要なく、持続的な双方向通信に使用できます。
これは、チャットやPub-Subなどのいくつかのシナリオで役立ちます。
HTTPとWebSocketの違いを視覚化するための図を以下に示します。

このフローチャートは、このサーバーの仕組みを説明しています。 
cmd
└── main
└── main.go
internal
└── websocket
└── handler.go
└── model.go
└── server.go
Main.go :実行されるメインファイル。
Handler.go :接続を開く/閉じるハンドルとメッセージをサーバーに渡します。
Model.go :サーバーが使用するモデルを保存します。
Server.go :クライアントメッセージに従って特定のアクションを実行し、WebSocketサーバーとして適切に動作するためにサーバーが必要とする関数も含まれています。
このリポジトリは理想とはほど遠いものです。それは単なる概念の証明です。
このリポジトリはパブサブの近くにありますが、チャットサーバーには使用できます。
たとえば、クライアントが自動的に自分のIDをトピックとしてサブスクライブするように、ソケット接続に関数を追加できます。他のクライアントは、これらのユーザーのIDをトピックとして使用してメッセージを公開します。
私は、他のユーザーが他の人のIDに購読するのを防ぐために、そのようなソリューションを組み合わせて構築してみましたが、それは機能します。
このリポジトリは、@tabvnのGolang-Pubsubに触発されています