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

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

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

Q&A

2回答

2161閲覧

[Milkcocoa] send() メソッドのデータ量上限はいくつでしょうか?

退会済みユーザー

退会済みユーザー

総合スコア0

0グッド

0クリップ

投稿2016/01/08 06:04

現在、Milkcocoaにて任意の画像データをsend()にて送りたいと思っております。

send()によるデータの通信はできているのですが、画像データ(base64形式, blob形式)をオブジェクトで
送信しようとした際、データ量が大きくて通信されていないようなのです。
(画像データ量を小さくしていくと、ある境で送ることができました。)

ここで質問なのですが
send()メソッドによるデータ量の上限はいくつなのでしょうか?
ドキュメントを確認した中には、push()メソッド項目に
『1回にpushできる最大サイズは16Kbyte』
と書かれていたのですが、これはpush()メソッドに関わらず
send()にも関係することなのでしょうか?

もしかしたらドキュメントに書かれているのを見落としているだけなのかもしれないですが
ご回答していただけると幸いです。

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

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

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

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

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

guest

回答2

0

無料版の管理コンソールで、確か16kbっていうのを見た記憶があります。
パケット送信回数制限が300/日だったと思うので、2mbのファイルを14kbに分割して送信したらパケット制限にひっかかるのかまでは未確認です。
------- 検証結果 -----------
base64 変換後のイメージサイズ:12000 bytes

milkcocoa に post したデータ
this._ds.push({
"title": title,
"dataType": dataType,
"imageData": imageData,
"message": message,
"date": new Date().getTime()

imagedata は、img タグそのものに変換済みで、
結局、imageData の送信データサイズが 4000 バイトで送信失敗、
3500 バイトで 送信成功、受信成功ということから、push のデータサイズは合計 4KB 以内って感じです。
3500 のときの、message="じゃんけん画像送信テスト" です。
JSON.stringify() 後のデータサイズが 4KB 未満にしないとまずそうです。
分割で送信するとあっという間に転送パケット制限に引っかかりますね。

投稿2016/01/08 06:17

編集2016/01/09 06:24
ipadcaron

総合スコア1693

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

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

DAO

2016/01/12 03:40

ご回答ありがとうございます! 4KBの回答をいただいた後、こちらでも適当に3〜4KBで確認いたしました! 4KBの制限は画像ではなかなか厳しいようですが、今やろうとしていることに関しては 十分に足りそうですので、試行錯誤がんばります! ありがとうございました!
guest

0

javascript

1var yourAppId = "????????"; 2 3function MilkcocoaUtil(dataStore, renderCallback) { 4 return new MilkcocoaUtil.prototype.init(dataStore, renderCallback); 5} 6 7MilkcocoaUtil.prototype = { 8 dataStore: null, 9 render: null, 10 _ds: null, 11 _queueMap: {}, 12 init: function(dataStore, renderCallbackFn) { 13 14 console.log("MilkcocoaUtil init start."); 15 //0.set callback 16 this.render = renderCallbackFn; 17 this.dataStore = dataStore; 18 19 //1.ミルクココアインスタンスを作成 20 //var milkcocoa = new MilkCocoa("{your-app-id}.mlkcca.com"); 21 var milkcocoa = MilkCocoa.connectWithApiKey(yourAppId + ".mlkcca.com", "**********", "**************************"); 22 23 //2."message"データストアを作成 24 this._ds = milkcocoa.dataStore(this.dataStore); 25 26 //3."message"データストアからメッセージを取ってくる 27 var self = this; 28 this._ds.stream().sort("desc").next(function(err, datas) { 29 datas.forEach(function(data) { 30 // queue の課題: 投稿順序れ崩れる、html にマーカー(ローディング中)を差し込んでおく必要がある。 31 data = self.queue(data); 32 if (data != null) 33 self.render.apply(self, [data]); 34 }); 35 }); 36 37 //4."message"データストアのプッシュイベントを監視 38 this._ds.on("push", function(eData) { 39 // queue の課題: 投稿順序れ崩れる、html にマーカー(ローディング中)を差し込んでおく必要がある。 40 eData = self.queue(eData); 41 if (eData != null) 42 self.render.apply(self, [eData]); 43 }); 44 console.log("MilkcocoaUtil init success."); 45 }, 46 queue: function(data) { 47 48 console.log("queue: " + JSON.stringify(data)); 49 50 // data.value.kind = SPL or RAW を判定して、受信データを振り分ける 51 if (data.value.kind == "SPL") { 52 var splitId = data.value.id; 53 if (!(splitId in this._queueMap)) { 54 this._queueMap[splitId] = []; 55 } 56 this._queueMap[splitId].push(data.value); 57 if (this._queueMap[splitId].length == data.value.size) { 58 this._queueMap[splitId].sort(function(a, b) { 59 return a.index - b.index; 60 }); 61 62 var stringifiedJson = ""; 63 this._queueMap[splitId].forEach(function(v, i, s) { 64 65 stringifiedJson += v.data; 66 67 }); 68 69 data.value = JSON.parse(stringifiedJson); 70 71 return data; 72 } 73 return null; 74 } else if (data.value.kind == "RAW") { 75 return data; 76 } else { 77 return data; 78 } 79 }, 80 post: function(title, dataType, imageData, message) { 81 82 var self = this; 83 84 if (!!dataType && !!message) { 85 86 var sendData = { 87 "kind": "RAW", 88 "title": title, 89 "dataType": dataType, 90 "imageData": imageData, 91 "message": message, 92 "date": new Date().getTime() 93 }; 94 95 var DS_LIMIT = 3500; 96 // JSON データ変換後のデータサイズが 3800 バイト以上の時、データを分割して送信する 97 // 4000 で送信失敗、+200 は、分割データの JSON.stringify に付くクオートとかの分 98 var stringifiedJson = JSON.stringify(sendData); 99 100 if (stringifiedJson.length <= DS_LIMIT) { 101 // 送信データ限界までならそのまま送信 102 self._ds.push(sendData, function (e) {}); 103 } else { 104 // 限界オーバーなら分割送信 105 var splitArr = []; 106 var uniqueId = "SPLIT" + (new Date()).getTime(); 107 while (stringifiedJson.length > DS_LIMIT) { 108 splitArr.push({ 109 kind: "SPL", 110 size: 0, 111 index: 0, 112 id: uniqueId, 113 data: stringifiedJson.substring(0, DS_LIMIT) 114 }); 115 stringifiedJson = stringifiedJson.substring(DS_LIMIT); 116 } 117 if (stringifiedJson.length > 0) { 118 splitArr.push({ 119 kind: "SPL", 120 size: 0, 121 index: 0, 122 id: uniqueId, 123 data: stringifiedJson 124 }); 125 } 126 splitArr.forEach(function(data, index, splitArrSelf) { 127 data.size = splitArrSelf.length; 128 data.index = index + 1; 129 console.log("分割送信:" + data.index + "/" + data.size); 130 self._ds.push(data, function (e) {}); 131 }); 132 } 133 } 134 }, 135 escapeHTML: function(val) { 136 //インジェクション対策 137 return $('<div>').text(val).html(); 138 } 139}; 140 141MilkcocoaUtil.prototype.init.prototype = MilkcocoaUtil.prototype; 142 143 144function mcRenderMessage(message) { 145 146 var last_message = "dummy"; 147 // message = { 148 // id: " unique id created by 'milkcocoa's server engine'" 149 // value: { 150 // "title": title, 151 // "dataType": dataType, 152 // "imageData": imageData, 153 // "message": message, 154 // "date": new Date().getTime() 155 // } 156 // }; 157 // 158 var m = message.value; 159 var div = $("<div />"); 160 div.append("<p>" + m.message + "</p>"); 161 div.append("<p>" + new Date(m.date).toLocaleString()+"</p>"); 162 div.append("<img src='" + m.imageData + "' />"); 163 164 $("#"+last_message).before('<div id="'+message.id+'" class="post">'+ div.html() +'</div>'); 165 last_message = message.id; 166} 167 168

html

1使い方 2<script> 3$(function() { 4 5 var last_message = "dummy"; 6 var mc = MilkcocoaUtil("imageTestDs", function(message) { 7 // message = { 8 // id: " unique id created by 'milkcocoa's server engine'" 9 // value: { 10 // "title": title, 11 // "dataType": dataType, 12 // "imageData": imageData, 13 // "message": message, 14 // "date": new Date().getTime() 15 // } 16 // }; 17 // 18 var m = message.value; 19 20 var div = $("<div />"); 21 div.append("<p>" + m.message + "</p>"); 22 div.append("<p>" + new Date(m.date).toLocaleString()+"</p>"); 23 div.append(m.imageData); 24 25 $("#"+last_message).before('<div id="'+message.id+'" class="post">'+ div.html() +'</div>'); 26 last_message = message.id; 27 28 }); 29 30 var counter = 1; 31 $("#clickMe").click(function(e) { 32 $.ajax({ 33 url: "jsp/loadimage.jsp", 34 unique:false, 35 complete: function(xhr) { 36 var data = xhr.responseText; 37 // title, dataType, imageData, message 38 console.log("ajax request recieved: " + data.substring(0,50)); 39 console.log("ajax request recieved size: " + data.length + " bytes."); 40 mc.post("じゃんけんの画像", "image/png", data, "じゃんけん画像送信テスト" + counter++ + " 回目"); 41 //.substring(0, 3500) 42 } 43 }); 44 }); 45}); 46</script> 47 48

Java1.8 TOMCAT8 EclinpseLuna 動的Webプロジェクト
3500 - 4000 バイトが肝。

投稿2016/01/09 08:42

ipadcaron

総合スコア1693

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問