我有一个侦听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文档,试图解决这个问题。任何帮助将不胜感激。