2016-10-04 78 views
0

我有一个关于一个一般性的问题异步插座-I/O在Java中到处找不着答案:java异步套接字 - 哪个回复属于哪个请求?

说我通过使用TCP套接字发送3个请求到特定服务器异步,这意味着,而无需在发送下一个请求之前等待请求的响应。据我所知,我可以通过在一个单线程中使用例如Java NIO和非阻塞SocketChannel来实现。现在,假设我得到2个回应,并且服务器以接收它们的顺序处理请求。我有什么方法可以确定我的3个请求中的哪些回复属于哪个?毕竟,我无法保证我的请求以我发送给他们的顺序到达服务器。对吧?是否有任何库(可能不是Java.NIO)可以帮助我分配请求的响应?

期待您的回复。 很多谢谢!

回答

0

如果,如你所说,使用TCP顺序保证(连接中)。 如果,就像你说的,服务器处理按照它接收并且在特定的顺序发送响应命令请求,响应订单将对应的请求命令。所以你按顺序分配它们。但是如果我们所谈论的软件是由您(您的团队)开发的,那么您最好在客户端 - 服务器协议中包含一些请求ID,这将有助于您分配对请求的响应,而不必取决于顺序。

0

如上所述Network Socket,套接字对被描述为4元组,如果您使用的协议是TCP,那么您同时拥有请求的本地和远程ip +端口。假设你发送了3个请求,你可以看到每个套接字的数据来自哪里(远程ip +端口)。

+0

嗨艾瑞克, 感谢您的答复。但是,当我仅使用一个套接字进行与服务器的整个通信时,是否也可以将请求分配给请求? (即所有请求都通过同一个套接字发送) – user1723175

+0

将套接字想象为一个管道,假设您通过该套接字发送http请求,您必须等待响应才能发出另一个请求,因为存在一个通过这个管道发送东西的协议。所以是的,如果你想使用一个套接字,它必须是同步的(另一方面,你可以改变协议来支持最多3个请求或类似的东西,但你必须教另一个对等的协议,并通过这样做必须以什么顺序明确他将要回答的要求) – Erik