EventMachine プロトコルとして実装したカスタム Protobuf ベースのプロトコルがあり、サーバーとクライアント間の安全な接続を介して使用したいと考えています。クライアントからサーバーにメッセージを送信するたびに、送信される Protobuf のシリアル化された文字列のサイズを表す 4 バイトの整数をメッセージの先頭に追加して、サーバーがネットワークを解析する前にネットワークから読み取るバイト数を認識できるようにします。データを Protobuf メッセージに戻します。
クライアントとサーバーの両方のプロトコル ハンドラーでコールバック メソッドを呼び出しstart_tls
ていpost_init
ます。サーバー ハンドラーのメソッドには、サーバーの秘密鍵と証明書が渡されます。私が出力しているログメッセージに基づいて、この段階でエラーが発生していないようです。
問題が発生するreceive_data
のは、サーバーのハンドラー コードのコールバックでデータの解析を開始するときです... 4 バイトのデータをネットワークから読み取り、それを整数にアンパックしますが、アンパックされる整数は同じ整数ではありません。クライアントから送信します (つまり、17 を送信していますが、134222349 を受信しています)。
これは、TLS を使用しない場合には発生しないことに注意してください...start_tls
クライアント コードとサーバー コードの両方で呼び出しを削除すると、すべて正常に動作します。
receive_data
TLS が使用されている場合、SSL/TLS データがコールバックに渡されるのは事実ですか? その場合、クライアントからのデータがいつ開始されるかをどのように知ることができますか? このユースケースについて説明しているサンプルコードが見つからないようです...