SAPの勉強に日々精進しております。やっさんでございます。SAMとGo言語を用いて、WebSocket通信によるチャット機能を実践してみたいと思います。去年の2018年12月になりますので、まだまだ記憶に新しい出来事です。GatewayでWebsocketが利用可能これまでは双方向の振る舞いを行うための永続的な管理を担当するホストサーバーが必要でしたが、サーバーレスで実現することで不要になります。以下の概要図から簡単に処理内容を説明いたします。Labmdaが実行されます。この時、コネクション情報をDynamoDBに永続化します。クライアントがサーバーにメッセージを送信します。Lambdaは全てのコネクション情報を宛先としてメッセージを送ります。Lambdaが実行されます。この時、コネクション情報をDynamoDBから削除します。詳細なコード内容はGitHubもご参照下さい。https://github.com/x-blood/xblood-go-sam-websocketそれでは、実践していきましょう!onConnectの処理内容onConnectのLambdaファンクションは、コネクション情報をDynamoDBに永続化します。response.Create200response()}DynamoDBへのCRUDをより便利にするライブラリguregu/dynamoを利用しています。接続中の全てのクライアントに送信します。response.Create200response()}onDisconnectの処理内容onDisconnectは、クライアントが切断した場合にコネクション情報をDynamoDBから削除します。template.ymlの内容template.ymlの内容は盛りだくさんのため、GitHubの当該コードをご参照下さい。SAMを用いて生成しています。利用して動作確認してみます。接続wscatでWebSocketのエンドポイントに接続します。分かりやすいように、クライアント1、2でターミナルの色を分けました。表示され、接続に成功していることが確認できます。接続に成功すると、DynamoDBにもコネクション情報が保存されています。メッセージ送信それでは、クライアント1からメッセージを送信してみます。問題なくメッセージが送信できています。メッセージ受信クライアント2からメッセージが受信できることを確認します。コネクション切断コネクションを切断してみます。コネクション切断後のコネクション情報DynamoDBからもコネクション情報が削除されていることを確認できました!いかがでしたでしょうか。サーバレスによるWebSocket通信は、クライアントアプリケーションを強化するためのバックエンドサービスとして比較的簡単に導入することができるでしょう。SAMを活用したサーバレスアプリケーションの開発実績があります少しでもご興味を持ちましたら、弊社にエントリーしていただければ幸いです。一緒に楽しく成長しあえる仲間を募集しています。ウェブサービス株式会社(DWS)公式ブログ記事URLをコピーしました。