質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1066閲覧

unity上でAWSのDynamoを利用したチャット機能を実装したい

k.shiho

総合スコア5

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/07/17 06:38

編集2020/07/17 06:41

前提・実現したいこと

unity上でAWSのDynamoを利用したチャット機能を実装したい

発生している問題・エラーメッセージ

AWS dynamoDBを利用して、Cognito認証後、Table.LoadTableAsyncでテーブルに接続した後で
updateで毎フレームクエリを発行した所、readCapacityUnitが上がっているとCloudWatchから通知がきました。

よくあるチャットアプリのように単純なdynamoDBに対して書き込みがあったかポーリングをしたかっただけなのですが、capacityunitを使わず、書き込みがあったかどうかだけ検査する方法はありますでしょうか?

よろしくお願いいたします。

該当のソースコード

C#

1 void Start(){ 2 UnityInitializer.AttachToGameObject(this.gameObject); 3 AWSConfigs.HttpClient = AWSConfigs.HttpClientOption.UnityWebRequest; // 4 var credentials = new CognitoAWSCredentials(idpool, region); 5 adc = new AmazonDynamoDBClient(credentials, region); 6 Table.LoadTableAsync(adc,"Chat",(loadTableResult)=>{ 7 if(loadTableResult.Exception != null){ 8 return; 9 } 10 else{ 11 _dynamo = loadTableResult.Result; 12 } 13 }); 14 _request = new QueryRequest 15 { 16 TableName = "Chat"//, 17 , ReturnConsumedCapacity = "TOTAL" 18 , Limit = 20 19 , KeyConditions = new Dictionary<string, Condition>(){{ 20 "RoomId",new Condition(){ 21 ComparisonOperator = ComparisonOperator.EQ, 22 AttributeValueList = new List<AttributeValue>(){new AttributeValue { S = roomkey }} 23 } 24 }, 25 { 26 "ChatId", new Condition(){ 27 ComparisonOperator = "GT", 28 AttributeValueList = new List<AttributeValue>(){ new AttributeValue { S = speaker + "#" + DateTime.MinValue.ToString() } 29 } 30 } 31 } 32 } 33 }; 34 } 35 private void FixedUpdate(){ 36 adc.QueryAsync(_request, (result) =>{ 37 var cnt = result.Response.Items.Count; 38 if (!cnt.Equals(0)){ 39 foreach (var item in result.Response.Items){ 40 //何かの処理 41 } 42 43 var last = result.Response.Items.Count - 1; 44 var lastkey = result.Response.Items[last]; 45 lastkey.Remove("ExpireDate"); 46 lastkey.Remove("Remerk"); 47 _request.ExclusiveStartKey = lastkey; 48 } 49 }); 50 }

試したこと

CloudWatchで監視したところ、FixedUpdateが動いて間、キャパシティが上昇していた。

補足情報(FW/ツールのバージョンなど)

テーブル名はChatです。

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

毎フレームポーリングするってことは1秒間に60回とかポーリングすることになります。それは通信量も上がるでしょう。
チャットですから、数秒に一回程度のポーリングでいいんじゃないでしょうか。

やり方は「unity 数秒に一回」とかでググればいっぱい出てきます。

本来であれば WebSocket など使って「即時かつ通信料が上がらない」やり方をしたいところです。そうなると Photon Chat とかを使った方が簡単ですね。

投稿2020/07/17 12:52

bboydaisuke

総合スコア5275

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k.shiho

2020/07/17 14:06

bboydaisuke様 回答の程ありがとうございます。 やはりポーリング間隔の低減が良さそうですね。 毎フレームにしてみたのは、Dynamoの底力が良く分かって無かった為ですが、変な実装をすると簡単に課金まで行きそうですね。 PunとかのP2Pでも良かったのですが、DBでデータ集中的に管理できる方に魅力を感じるのでこのまま間隔調整を行ってみます。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問