JSON リクエストをリッスンする Python サーバーがあります。コードの「受信」セクションは次のようになります。
while True:
next_message = conn.recv(1024)
response = Foo.do_some_stuff(next_message)
conn.send(response)
Python API を使用する Sinatra アプリケーションを作成しました。
client = TCPSocket.new("localhost", 5000)
client.puts("foobar")
response = client.gets
上記のコードはすべて完全に機能します。今、私はいくつかのJavaコードで似たようなことをしています。
Socket client = new Socket("localhost", 5000);
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(new client.getOutputStream(), true);
out.println("foobar");
String response = in.readLine();
問題は、このコードは最初のリクエストでは機能しますが、後続のリクエストでは Python サーバーがハングし、メッセージを待機することです。私の質問は、メッセージの終わりを知らせるためにメッセージに追加する出力ストリームの Ruby 実装とは何ですか?Java 実装ではそうではありません。
関連する詳細: Java コードで Google Gson パッケージを使用して、Python サーバーに送信する Json オブジェクトを作成しています。PrintWriter で自動フラッシュを使用しています。
基礎となるTCPプロトコルのために、おそらく後続のリクエストがPythonサーバーに送信されるデータのサイズを変更し、Pythonソケットは接続が終了するか1024バイトが読み取られるまでリッスンし続けることを読みました。Ruby の実装が完全に機能することを除けば、これは理にかなっています。
私はこれを理解しようとして、過去 2 日間、Java、Python、および Ruby のドキュメントを掘り下げてきました。どんな助けでも大歓迎です。