我有一个侦听 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 上使用自动刷新。
我读到可能后续请求会改变发送到 Python 服务器的数据的大小——因为底层 TCP 协议,并且 Python 套接字将继续侦听直到连接结束或读取 1024 个字节。这是有道理的,除了 Ruby 实现完美运行。
在过去的两天里,我一直在研究 Java、Python 和 Ruby 文档,试图弄清楚这一点。任何帮助将不胜感激。