状況を想像してみてください...あなたはそれがあなたのプロジェクトにいくつかの新しい技術を結びつけることを意味すると決めました。 彼らはあなたが必要とするすべてを置き、ライブラリを接続し、そしてopa ...は機能しません。 そして、ここであなたは苦しんで、ピッキングしていますが、それはすべて機能せず、機能しません。 そして、このライブラリーにしばらく時間を費やした後、このケースを削除し、別のチームから同様のライブラリーをダウンロードして試してみることにします。
または、そうではなかったかもしれません。 たぶん、あなたは非常に頑固で意図的な人であり、問題を終わらせ、製品の開発を支援するためにすべての費用を決定します。
気にする人のための物語の継続...
状況
STOMPプロトコルを使用して、Zend FrameworkでRabbitMQを操作する方法を学びたいと思います。 したがって、必要なクラスを接続すると、疑問がすぐに発生します:動作方法 Google-何もありません。 さて、オーケー、ウィキペディアに行き、公式ウェブサイトへのリンクを見つけます。ここには、プロトコルの説明と例があります。 例として、作業を行うためにどの順序で何を呼び出すかについて大まかに理解しています。
書き込み-要求は送信されますが、応答を受信するとフリーズします。 まあ、リクエストをダンプ-データが来る。 HEXエディターで表示される内容を確認し、次にコードで期待される内容を確認します。 Zendクラスでリクエストの解析中にエラーが見つかりました。
編集、実行-無効なログイン。 再びリクエストをダンプしますが、すべてが真であり、例に対応しています。 telnetを介してプロトコルをエミュレートしようとします-同じエラーです。 ヘッダーのコロンの後のスペースを削除しようとします。つまり、
CONNECT
login:<username>
passcode:<passcode>
稼いだ! うん! 私たちは喜んで手をこすり、ActiveMQをインストールし、最初のオプションをチェックすることにしました。 そして、それは機能します。 これで、RabbitMQにコードの記述方法を知らせます。
私たちは手紙を書き、答えを得る:
- \ x00の後の改行について-これは仕様の一部ではありません。 1.1では*許可されていますが、1.0では言及されていません。 これは仕様が要求するものではないので、Zendクライアントは、サーバーが仕様で要求されていない改行を送信することを期待しているため、ここでエラーが発生していると思います。
- ヘッダー値のトリミングに関して、これは1.1で明示的に禁止されているため、すべてをサポートしているわけではありません。 技術的には1.0でサポートできますが、CONNECTフレームが処理される*後*になるまで、クライアントが使用しているバージョンはわかりません。 しかし理想的には、Zendクライアントは1.1に更新されます。
つまり、Zendクラスは仕様で定義されていない文字のシーケンスを想定しているため、コードがフリーズし、それらを送信する必要はありません。 ヘッダー内の末尾のスペースは有用な情報になる可能性があるため、トリミングしません。 また、一般的に、仕様1.1と互換性のあるサーバーを作成しており、Zendは1.0のみをサポートしています。
しかし、すみません、公式ウェブサイトのどこにプロトコル1.1について書かれていますか?
回答:これは古いサイトです。新しいサイトへのリンクはこちらです。 また、RabbitMQをZendのバグに合わせて調整する2つのパッチもあります。
いくつかの詳細を明確にするためにもう少し対応しましたが、ここで出口でやったことを示します。
まとめ
- RabbitMQをZendのバグに合わせて調整する2つのパッチを入手しましたが、私も尋ねませんでした。
- RabbitMQチームは、古いサイトの所有者に新しいサイトへのリンクを配置するよう依頼しました。
- STOMPプロトコルに関する記事の新しいサイトへのリンクが英語版ウィキペディアに追加されました。
- Zendでは、3つの新しいチケットが追加され、もう1つ更新されました。
あとがき
このストーリー全体には超自然的なものは何もありません。 誰もがコミュニティ製品の開発を支援できることを示したかっただけです。 手頃な価格で動作します。 おそらく、あなたはもっと壮大な例を挙げることができます。
それで、金曜日に似たような話をお互いに共有しましょう。