Ruby对套接字输出流的处理与Java有何不同?

时间:2013-10-27 00:57:36

标签: java python ruby sockets

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

0 个答案:

没有答案