問題タブ [unreliable-connection]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
simulation - 不安定なネットワーク接続をシミュレートできるプログラムはありますか?
サーバー/クライアント アプリケーションの接続の問題をデバッグするために、不安定なネットワーク接続をシミュレートする必要があります。微弱なワイヤレス ネットワークなどの状況をシミュレートできるプログラムがあるかどうか疑問に思っていました。
帯域幅の削減だけでなく、信頼性の低下、頻繁なオンとオフ、切断の短いバーストなどについても言及しています。
application-design - サーバークライアントアプリで不安定なインターネット接続を処理する
サーバークライアントアプリで不安定なインターネット接続を管理するために使用できるテクノロジーは何ですか。私は主にPHP(+ Zend Framework)を知っており、C#とASP.NETMVCを学んでいます。WCF / MSMQは役立つと聞きましたが、どのように... PHP(私がよく知っている)でできることはありますか?しかし、.NETの代替案が優れているかどうかを知ることも良いことです
背景:
client ***s***はサーバーdbに接続してCRUDを実行します。しかし、インターネット接続が失敗した場合、これは不可能になります。どうすればこれを修正できますか?
現在使用されているソリューションは、ローカルホストデータベースを使用することでした。1日の終わりに、すべてのクライアントがサーバーにアップロードし、朝にサーバーから「統合」データベースをダウンロードします。アップロード/ダウンロードがまだ失敗する可能性があるため、これは絶対確実ではありません。転送される大量のデータを考慮すると、実際には可能性が高くなります。
更新:MSMQ/WCFの代わりにPHP/Zend Framework / MySQLがありますか?
.net - 信頼できる (耐久性のある) 分散ログ エンジン
分散システム用の商用ロギング フレームワークを探しています。このフレームワークでは、リモート サーバー上の .NET アプリケーションがメッセージをログに記録し、中央の場所で収集できるようにする必要があります。可能であれば、中央の場所は SQL Server データベースにメッセージを保存する必要があります。
要件:
- ネットワークの中断により中央ロケーションへのメッセージの即時ディスパッチが妨げられている場合でも、リモート サーバーでメッセージのロギングを開始できます。
- 中央の場所へのメッセージのディスパッチは、.NET アプリケーションを実行しているプロセス以外のプロセスで処理して、ASP.NET アプリケーションまたは Web サービスのパフォーマンスが低下しないようにする必要があります。
- 中央の場所へのメッセージの最終的な配信を保証します。たとえば、ネットワークが応答しない期間の終わりに向けてリモート サーバーが再起動した場合、ログに記録されたメッセージは、リモート サーバーと通常のネットワーク状態が復元されたときに配信されます。
wcf - 非二重 WCF チャンク用のライブラリまたはサンプルはありますか?
チャンクを使用して断続的な接続損失に対処し、ストリーミングを使用して必要な大きなタイムアウトを減らす、HTTPS 経由のファイル転送サービスを実装する方法を探しています。クライアントがファイアウォールの背後にある可能性があるため、MSDN のChunking Channelサンプルは適切ではありません。
Microsoft フォーラムでこれに関する古い議論がありますが、完全な回答ではなく、少なくとも私が実装するノウハウを持っているものではありません。
udp - 信頼できる UDP と ACK 方式の質問
信頼できる UDP の実装について読んでいます (つまり、ACK パケットを送信し、非 ACK パケットを再送信します)。
私がネット上で見つけたように思われる 2 つの主なパターンのうち、
クライアントは、受信した各パケットに対して、そのパケットのシーケンスを含む ACK を送信します。サーバーは、ACK を受信しない限り、パケットが配信されていないと見なします。
クライアントは、欠落していると思われるパケットのシーケンスを含む ACK パケットを送信します。サーバーは、クライアントからシーケンスが欠落しているという ACK を受信しない限り、パケットが配信されたと想定し、要求された (欠落している) パケットを再送信します。
つまり、1. ではクライアントは受信したパケットのシーケンスを送信し、2. ではクライアントは欠落したパケットのシーケンスを送信します。
それぞれの方法の長所と短所は何か、そしてどちらがより主流なのか疑問に思っています (私は 1 を想定していますが、ほとんどのパケットが到着し、通常失われるのはごくわずかであるため、2 は非常に賢い方法のようです)。
編集:両方の方法の短い例:
java - 信頼性の低いネットワークと低帯域幅での Java ORM の戦略
信頼性の低いネットワークで動作する必要があるシステムの Hibernate を検討しています。読み取り/書き込みアクセスが必要な単一の中央データベースがありますが、かなりパッチの多い Wi-Fi ネットワークを介して利用できます。さらに、アプリケーションを正常にシャットダウンしない電力損失が発生する可能性があるため、どのソリューションにも、電源の再投入に耐えられる永続的なキャッシュが必要です。最後に、これはメモリとディスク容量がわずかしかない組み込みシステムであるため、たとえば、データベースの本格的な複製を行うことは実行可能な戦略ではありません。
私は Hibernate 2nd Level キャッシングの基本的な理解があり、この問題を解決するために Ehcache のようなものでこれを構成することが可能かどうか疑問に思っていますが、その主な目的は可用性ではなくパフォーマンスであるように思われるので、私は認識していません落とし穴は何ですか。
また、ローカル データベースへのレプリケーションを含む他の戦略も検討したいと考えています。これを実装するために、自分で面倒な作業をしすぎる必要はありません。
いくつかの経験または可能な代替手段を探しています。
rabbitmq - PubSub + 信頼できない存在のサブスクライバーへの信頼できるメッセージ配信
パブリッシュ/サブスクライブ バス (Mule、ZeroMQ、RabbitMQ など) を使用するシステムを構築する必要がありますが、すべての文献は、サブスクライバー アプリケーションが、サブスクライブ先のトピックからのメッセージを確実に受信できることを示唆しています。メッセージを届けることができます。
一部のアプリケーションがパブリッシュ/サブスクライブ バスに確実に接続されるシステムがありますが、他のアプリケーションはアクティブではないか、常にバスに接続されません。
明らかな解決策は、信頼できないアプリケーションとパブリッシュ/サブスクライブ バスの間にある種の「存在」プロトコルを設けて、「存在する」アプリケーションがメッセージをすぐに配信し、「存在しない」アプリケーションがメッセージを永続的なバッファにキューに入れるようにすることです。そして、「プレゼンス ハンドシェイク」が完了するとすぐに、キューに入れられたメッセージが新しくプレゼンスされたアプリケーションに配信されます。
この種の機能が組み込まれているパブリッシュ/サブスクライブ バスはありますか、またはこれを行うオープンソース アドオンはありますか? これについて説明している URL を教えてください。
synchronization - 両将軍の合意
信頼できないチャネルで合意プロトコルを見つけようとしています。基本的に二者(AとB)が何かをするのに同意しなければならないので、それは2人の将軍の問題です.
防弾ソリューションがないため、これを実行しようとしています。
- A は連続してシーケンス 1 のメッセージを送信します
- B がシーケンス 1 を受信すると、連続してシーケンス 2 で応答します。
- この時点で、A は seq 2 を受信するため、seq 3 の送信を開始します。
- ...
私の質問。両当事者は、いつ行動を起こすことができると結論付けることができますか? 明らかに、条件を設定することはできません。「10 件のメッセージを受信した後に実行する」というのは、最後の送信者はメッセージ 10 件が到着したという確実性を持たないためです。振り出しに戻ります。
別のアイデアはどうですか:
- このように、事前に定義された時間、通信を続けます。その期間の終わりに、両当事者はチャネルの信頼性について考えます。それは受け入れられるでしょうか?
actionscript-3 - 信頼性の低いインターネット上でのデータ永続化のためのアプリケーション設計
Wi-Fi経由でインターネットを介してWebサービスと通信するFlexアクションスクリプト3スケジュールリマインダーアプリがあります。問題は、Wi-Fi 接続が不安定で、ドロップアウトが頻繁に発生することです。アプリが通知するスケジュールはあまり頻繁に変更されません。そのため、毎日/毎時間スケジュールを見つけるために Web サービスを呼び出す代わりに、アプリはデータをローカルに保存できます。また、ユーザーがアプリでスケジュールを更新すると、Web サービスが更新され、スケジュールのタスクが完了します。このデータはローカルに保存することもできるため、ユーザーが次にアプリを使用するときにインターネット接続があれば、アプリは Web サービスを更新できます。このような場合のアプリケーション設計の提案は何ですか? 例はありますか?
android - 信頼性の低いネットワークを考慮した Android からのメッセージ キューイング
私のアーキテクチャは、サーバー上で ActiveMQ を使用し、Android クライアントにメッセージを送受信させます。ネットワークの状況は非常に不安定です。おそらく何時間も接続が失われています。Androidクライアントでメッセージをキューに入れ、接続が回復したら確実に配信できるフレームワークはありますか?