質問 > その他 > iOSで2重リクエスト発生 |
その他
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
se001 |
投稿日時: 2015/2/3 11:00
対応状況: −−−
|
新米 登録日: 2014/8/18 居住地: 投稿: 4 |
iOSで2重リクエスト発生 EC-CUBE:2.13.1
PostgreSQL:9.3.1 上記をAWS上にてWEBアプリケーションを構築していますが、iOSからの注文の際のみ、2重リクエストが発生しています。 (※毎回ではなく、100回に2〜3回のペース) 注文画面を、カスタマイズしていますが、処理の最初と最後では、トランザクションの開始&終了を明示しています。 処理は「DB整合性チェック→DB更新→メール送信」の順にしています。 Apacheのログを確認すると、同一transactionidで、https通信が2回発行されており(0.3マイクロ秒差)、処理が並列で行われ、メールが2回飛んで困っております。 iOS側のバグなのか、EC-CUBEのカスタマイズ方法が間違っているのか判別できません。 何か解決の糸口となりそうな情報や、コーディング方法がありましたら、教えてください。 |
AMUAMU |
投稿日時: 2015/2/28 14:49
対応状況: −−−
|
神 登録日: 2009/5/2 居住地: 東京都 投稿: 2712 |
Re: iOSで2重リクエスト発生 リクエストが2回とんだ場合の処理と、トランザクションは必ずしも関連がある話ではありません。
2回飛ぶ問題は、おそらくボタンなどの構成や何らかのカスタマイズでjavascriptがエラーを起こしていて多重でボタンイベントが発生した場合の処理が動いていないことが考えられます。 トランザクション的な話で考えますと EC-CUBEでは行ロックを基本的にしていませんので、カスタマイズされている中で、整合性チェックをしっかりやろうとすればするほど、多重に処理される可能性が広がると思います。 (行ロックおよびテーブルロックしていない=前処理として読み込みが、ほぼ同時に走れば両方とも正の状態になる) 本来のEC-CUBEは、単一処理または短いシンプルな処理において受注処理を完了させる事により二重処理されないように、もしされても後のリクエストデータが有効になるように実装されています。 これらの点を考慮したカスタマイズをするのが良いと思います。 気をつけるべきはトランザクションに頼らない(または理解した)処理を実装する点かと思います。
|
se001 |
投稿日時: 2015/3/18 17:09
対応状況: 解決済
|
新米 登録日: 2014/8/18 居住地: 投稿: 4 |
Re: iOSで2重リクエスト発生 丁寧に、ご回答頂きありがとうございました。
アプリは、行ロックをするカスタマイズをかけ、一時的に対応しました。 (※依然、iOSからのみ2重リクエストは発生しています。) |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |