【发布时间】:2011-07-01 13:08:37
【问题描述】:
我正在寻找一个简单的 java 库,它可以按以下方式编写代码:
Remote remote = Remote.connect("some_host:1234");
Future<String> response = remote.request("hello");
// do something else
String reply = response.get();
它应该基于 tcp/ip 并在网络上使用纯文本消息以与语言无关,以便非 Java 服务器也能够发送/接收请求/响应。
(在告诉我使用普通套接字之前,请记住,在这种情况下,您需要实现包装器来分隔有效负载,关心接收到的消息重新排序,线程处理......这个例子很简单,但并不是那么简单实施很好。)
有没有像这样的现有 API?
PS:...越简单越好!
【问题讨论】:
-
在打电话给
response.get()之前你做了一些事情很奇怪。您可以稍后再读取套接字;接收到的输入缓冲在套接字中。但是,当您稍后尝试获取答案时,答案很可能甚至都不会出现。 -
这只是一种以更简单的方式处理它的常见模式。这样,您可以执行多个异步调用,例如
Future<String> response1 = remote.request("hello 1"); Future<String> response2 = remote.request("hello 2"); Future<String> response3 = remote.request("hello 3");,并在稍后阶段分别处理它们,也许在完成一些中间数据处理之后。然后对response2.get();的调用将根据响应是否到达而阻塞或不阻塞。以这种方式组织代码非常方便,能够将“未来响应”作为对象传递等等。 -
好的,有道理。我有两个连接类似的东西,我将等待的响应分成两个线程,但如果你有太多的响应等待,那将无法很好地扩展。顺便说一句,我对 java.nio 一无所知,但我认为这就是它的用途。
-
API 在另一端会是什么样子?在这里,您的代码正在发出请求并等待回复;在服务器端,代码必须允许线程等待请求然后发送回复。或者您想要来回进行对称的持续对话吗?
-
只是一些简单的、面向服务的......就像一个方法
String handleRequest(String msg)来实现和一个listen(port, requestHandler)
标签: java networking tcp