在java中等待客户端响应的正确方法是啥?

Posted

技术标签:

【中文标题】在java中等待客户端响应的正确方法是啥?【英文标题】:What is the correct way to wait for a client response in java?在java中等待客户端响应的正确方法是什么? 【发布时间】:2012-12-28 16:20:28 【问题描述】:

首先,如果您帮助我解决了读取未定义长度 HTTP 响应的问题,我要感谢您。我接受了您的建议,并从 HTTP 响应切换到原始 Java 套接字。但我对此也有一点问题。

推送服务器的本质是在收到东西时将它们推送到客户端(在我的情况下,系统使用一个标有设备 ID 的文件。)问题在于,对于 Java 教程中的 KnockKnock 示例,它们的代码:

while ((inputLine = in.readLine()) != null) ...   

在发送自己的东西之前等待客户端发送一些东西。所以我决定使用:

while (true) 
    if ((inputLine=in.readLine())==null) inputLine="";
    ...

如果任何输入interpereter 得到这个空字符串,那么他们不会做任何事情。

我的问题本质上是哪个更好,如果是第一个,我怎样才能在不产生线程的情况下继续检查文件以发送所需的内容?

【问题讨论】:

问题已回答here。 【参考方案1】:

第一个实现了为 KnockKnock 示例设想的协议:客户端发送“KnockKnock”,服务器响应。

第二个没有多大意义。如果客户端有一个与服务器打开的输出流,并且服务器调用readLine(),这意味着它正在等待来自客户端的一行。并且调用将阻塞,直到客户端发送一行,或关闭套接字。

您似乎不希望客户提供任何输入。在这种情况下,完全不要打开输入流,也不要在输入流上调用readLine()(显然)。需要发送的内容直接发送给客户,想发送就发送。

【讨论】:

我实际上确实希望有两种方式的通信(至少在握手开始时),但在那之后,它只侦听关闭连接的命令:“servicedeath\n”

以上是关于在java中等待客户端响应的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

取消请求的正确 HTTP 状态代码是啥

设计“独立于平台”的 GWT 服务器的最佳方式是啥?

在 Javascript 中验证响应来自我的服务器的最佳方法是啥?

在春季由resttemplate发出的每个请求发送客户端证书的正确方法是啥?

在linux服务器上处理多个客户端连接的正确方法是啥

使用 Django 提供 JSON 数据的正确/规范方式是啥?