java - bufferedReader.read() 被阻塞,但仅在某些设备上
问题描述
我构建了一个应用程序来将数据发送到服务器并且服务器正在响应响应。该应用程序可在所有三星设备上完美运行。我以为它已经完成了,但后来我得到了一部新手机,小米的 pocophone F1。它第一次以 50/50 工作,但第二次在 .read() / .readline() 处阻塞(答案包含 /r/n)。然后开始尝试其他的,在华为上也不起作用。
如何调试为什么 read() 会阻塞?
在三星上它可以工作 100/100 次。在其他情况下,达到 .read() 而不是 -1 的速度要慢 2/100 倍。
关于服务器的问题:(也许我在那里做错了)发送响应后是否必须关闭套接字?(我不想建立实时连接,只是要求响应完成响应。)目前,如果完成阅读,我将关闭客户端的套接字。(但上面说过有时它从未完成或到达 .read())。
解决方案
据我了解-您正在单独从套接字执行读取Thread
-如果您不这样做-您应该这样做。何时完成从套接字读取 - 您可以:
socket.close
从其他线程调用- 这将解锁所有read
从套接字阻塞的线程- 中断线程-这将使
read
方法抛出InterruptedException
-确保您正确处理它
或者 - 您的服务器可以关闭连接
推荐阅读
- php - 我的 PHP 表单发送数据但 sql 显示所有列零记录
- android - 在主线程外运行时对 Cloud Firestore 进行同步调用
- c# - 替换方法不适用于 C# 中的转义字符 '\xA0'
- javascript - 如何获取密钥并将其附加到 json 文件中的下一个值?
- python - 为多处理序列化对象很慢——有没有办法只序列化一次?
- python - Cloud Foundry 上的 Flask 应用程序 - 命令“python setup.py egg_info”失败,错误代码为 1
- python - Flask App 拒绝连接
- elasticsearch - 范围过滤器不适用于“gt”运算符但适用于“lt”
- routing - 骆驼的轻型工作流程
- node.js - Namecheap 共享主机和多节点 JS 应用程序