問題タブ [protocols]
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.
itunes - daap プロトコルの優れたリファレンス/ドキュメント/チュートリアルを知っている人はいますか?
初めて聞く方のために説明すると、これは Digital Audio Access Protocol の略です。これは、iTunes が音楽をストリーミングするために使用するものです。
このプロトコルは、プレイリスト情報の受け渡し、オーディオのストリーミングなどに HTTP を使用します。
仕様を見ましたが、不明な点が多いです。このプロトコルのより良いドキュメントへのリンクを持っている人はいますか?
rest - ほとんどの Web サービスが XML-RPC ではなく、REST スタイルであるのはなぜですか?
Flickr は XML-RPC と REST の両方の方法で Flickr を操作できることを知っています。
すべての言語に標準の XML-RPC ライブラリがあります (たとえば、Python には組み込みのライブラリがありますxmlrpclib
)。
標準の XML-RPC ライブラリは、シリアライズ/デシリアライズと、応答の送受信を処理します。
同じ API に REST スタイルを使用する Web サイトは、それぞれの言語で独自のライブラリを作成することになるようです。例: Yahoo! SDK を検索します。
私には、XML-RPC の方が優れているように思えますが、すべての証拠は反対です。なんで?
そう:
- ほとんどの Web サービスが XML-RPC ではなく REST スタイルであるのはなぜですか?
- 明らかでない XML-RPC の欠点はありますか?
xml - さまざまな言語で書かれたプログラム間でデータを交換する
私は小さなブラウザ ゲームを書いていますが、私は優れたデザイナーではないので、最初に技術的な部分から始めて、後でユーザー インターフェイスを追加したかったので、最初のバージョンにボット サポートを含めて、誰もが書くことができるようにしたかったのです。自分のボットにゲームをプレイさせます。こうすることで、ユーザー インターフェイスのグラフィックスを作成する必要がなくなり、テスト データと多くのテスターが安定して流れている間、ゲームのコアに集中することができます。
ただし、サーバー (C++) とクライアント (任意の言語ですが、最初の参照実装は C++ と Python になります) の間でデータを交換するさまざまな方法を決定することはできません。
ほとんどの言語には、これらのプロトコルの初心者向けの実装があるため、トランスポートについては、HTTP と TCP (いくつかの単純な自作プロトコル) を提供することを考えました。
データのエンコードについては、私が任意に定義したもの(CSVのようなプリミティブなもの)、JSON、XMLを検討しましたが、C++での使いやすさ、さまざまな言語での実装の容易さ、および人間にとっての理解可能性についてコメントをお願いします.
私は何をすべきか?
java - シリアル ポートの共有 (モデム プロトコル + ダイヤラー)
このコードを使用して、Xmodem でアーカイブを送信したかった: http://www.java2s.com/Code/Java/Network-Protocol/JModemsimpcommunicationprogram.htm
この場合、2 台のコンピューター間でダイヤルアップ接続を確立し、バイナリ ファイルを送信したいと考えています。しかし、このコードでは、ポートをセットアップした後、ファイルを転送する前にダイヤルする電話番号を設定できません。電話番号をダイヤルする別のアプリケーションとポートを共有する方法はありますか?
protocols - 信頼できるマルチキャストのための最も効率的なプロトコルは何ですか?
送信者がイーサネットを介して比較的大量のデータ(たとえば1秒あたり数メガバイト)を同じサブネット上の適度な数の受信者(たとえば12未満)にマルチキャストする必要がある場合、最も効率的なプロトコルは何ですか?信頼できるとは、パケットが失われた場合に、プロトコルによって、受信者でデータが失われないようにパケットが確実に再送されることを意味します。効率という用語を定義するのは非常に困難ですが、スループットを最大化し、両端のCPU使用率を抑えてネットワーク帯域幅を最小化するとします。それはまだ明確な定義ではありませんが、私が思いつくことができる最高のものです。ストリーム指向またはメッセージ指向のプロトコルのいずれかが受け入れられます。
実際の例をいただければ幸いです。長所と短所を説明できれば、主観的な回答、つまりお気に入りのマルチキャストプロトコルは何ですか。
sql - 表形式のデータを渡すためのバイナリ形式
私は、現実の世界と相互作用するレガシー組み込みデバイスを維持しています。一般的に、このデバイスはセンサーからデータを収集し、内部アルゴリズムを使用してデータを処理し、データが特定の「不良」状態に達すると警告を表示します。
デバッグの目的で、このデバイスが受信したデータの多くと、処理後のデータを定期的に送信してくれることを願っています。
ほとんどのデータは表形式で記述できるという結論に達しました。
明らかに、複数の形式のテーブルをサポートする必要があります。
したがって、基本的には、特定のテーブルの説明のセットを受け入れ、その説明に従ってテーブルデータを配信できるプロトコルが必要です。
データを送信するための擬似コードの例は次のとおりです。
データを受信するための擬似コードの例は次のとおりです。
テーブルの定義は、デバイスとそれと通信するクライアントコンピューターの両方でオフラインで行うことも、オンラインで行うこともできます。単純なハンドシェイクプロトコルを追加して、デバイスの起動時にテーブルの形式に同意することができます。
これはレガシーデバイスであるため、RS232通信のみをサポートし、CPUはかなり遅い(486に相当)ため、XMLのようなデータ転送方法を使用する余裕はありません。それらは高すぎます(計算時間または帯域幅のいずれか)。生のSQLコマンドの送信も考慮され、帯域幅を考慮して拒否されました。
[編集]
明確にするために、毎回テーブルヘッダーを送信するオーバーヘッドも削減します。データを送信するたびに、テーブルヘッダーを送信しないようにしています。そのため、テーブル行を送信するたびに、テーブルIDを送信する必要があります。
また、渡したいデータのほとんどは数値であるため、テキストベースのプロトコルは無駄が多すぎることにも注意してください。
最後に、Googleのプロトコルバッファを見ました。十分に近いですが、Cをサポートしていません。
[/編集]
私が説明したような既知のプロトコルまたは実装についてのアイデアはありますか?このデータを送信するためのより良いアイデアはありますか?
このプロトコルの設計はそれほど難しくないという事実を認識しています。私は2フェーズプロトコルを念頭に置いていました。
1)ハンドシェイク:入力するすべてのテーブルのヘッダーを送信します。各テーブルの説明には、各列のサイズに関する情報が含まれます。
2)データ:テーブルインデックス(ハンドシェイクによる)に続いて実際のデータを送信します。データの後にチェックサムが続きます。
しかし、私はそのような設計の細部を避け、いくつかの既製のプロトコルを使用したいと思います。またはさらに良いことに、利用可能な実装を使用します。
sql - SQLクエリのシリアル化と逆シリアル化
内部テーブルのリストを保持する組み込みデバイスがあります。デバッグの目的で、このテーブルの状態を外部データベースと同期させたいと思います。つまり、特定の構造体配列に要素を追加するときはいつでも、デバイスに「INSERTINTO...」コマンドを発行させたいのです。
ただし、RS232シリアルケーブルを介してデータを送信しているため、明示的なSQLを送信するオーバーヘッドは許容できません。
私がよく使うSQLコマンドは3種類しかないので、シリアル化できるのはこれらのいくつかだけです。つまりINSERT INTO
、、、DELETE FROM
およびUPDATE
。
私が念頭に置いていた一般的な考え方は、「圧縮/シリアル化可能な」SQLプロトコルを使用してデータを送信することです。コマンドをSQLサーバーに直接送信するのではなく、カスタムのシリアル化されたSQLサーバーに送信します。
- データベースを変更する単純なアクション(つまり、INSERT、DELETE、UPDATE)ごとに番号を割り当てます。使用可能なシリアル化可能なSQLコマンドは、、のみ
INSERT INTO x ()
ですDELETE FROM x WHERE id=y
。変更できるのはx
とy
。 - 最初に、サーバー上に必要なすべてのテーブルを一度作成します。各テーブルを数値にマップするハッシュテーブルをサーバー上に保持します。これは1回だけ実行されるため、プレーンSQLで実行できます。
- 次に、各テーブルに番号を割り当て、サーバーがこの番号を認識していることを確認します
- 最後に、SQLコマンドを実行する場合は常に、コマンド番号、テーブル番号、データ長、データの順に送信します。サーバーは、テーブルの説明によって実際のデータのレイアウトを把握します。
例えば
に翻訳されます
と
に翻訳されます
idは1バイト整数として定義されているため。
この精神で既知のプロトコル/実装はありますか?
誰かもっと良いアイデアがありますか?