首先,如果您通过阅读未定义的HTTP响应来帮助我解决问题,我要感谢您。我接受了您的建议并从HTTP响应切换到原始Java套接字。但是我也遇到了一些问题。
推送服务器的本质是在收到客户端时将内容推送到客户端(在我的情况下,系统使用标有设备ID的文件。)问题是,使用Java教程中的KnockKnock示例,他们的代码:
while ((inputLine = in.readLine()) != null) {...
在发送内容之前等待客户端发送内容。所以我决定使用:
while (true) {
if ((inputLine=in.readLine())==null) inputLine="";
...
如果任何输入互操作者得到这个空字符串,那么他们就不会做任何事情。
我的问题本质上是哪一个更好,如果是第一个,我怎样才能继续检查文件以发送不需要产生线程的内容?
答案 0 :(得分:2)
第一个实现了为KnockKnock示例设想的协议:客户端发送“KnockKnock”,服务器回答。
第二个没有多大意义。如果客户端有一个与服务器打开的输出流,并且服务器调用readLine()
,则表示它正在等待来自客户端的行。并且调用将阻塞,直到客户端发送一行或关闭套接字。
您似乎不希望客户提供任何意见。在这种情况下,嗯,根本不要打开输入流,也不要在输入流上调用readLine()
(显然)。只要您想发送它,就可以直接发送给客户端。