java socket长连接中解决read阻塞的3个办法

 更新时间:2014年08月05日 11:31:49   投稿:junjie  
这篇文章主要介绍了java socket长连接中解决read阻塞的3个办法,本文取了折中的一个方法,并给出代码实例,需要的朋友可以参考下

解决的方法有3个 :

1 约定发送的数据长度,比如 http的 keepAlive 就是必须依赖这个的 Content-Length
2 设置超时的时间,根据我的经验,只有在Socket级别设置才有效.

复制代码 代码如下:
Socket socket = new Socket(host,port);
socket.setSoTimeout(100); // 如果超过100毫秒还没有数据,则抛出 SocketTimeoutException

3 让发送端发送完数据后,关闭连接。 这个在Http的操作时很常见。

(InputStream如何判断数据已经读取结束)

某些时候无法修改客户端的情况下情况一就只有pass掉了,情况二相对来说比较适合,当阻塞后直接抛出一个异常。情况三不适合长连接,因为整个通信过程中链路是不能中断的,也不能调shutdown结束。其实还有第四种方法:当读取到某些字符就不在往下读取了,比如读取到byebye就break。但是这也需要改客户端代码。选了一种折中的办法-设置超时:

StringBuilder sb = new StringBuilder();
try {
  client.setSoTimeout(500);
  while ((a = client.getInputStream().read(buf)) != -1) {
    sb.append(new String(buf, 0, a));
    if (a != size) {
      break;
    }
  }
} catch (Exception e) {
}
System.out.println(sb);

相关文章

  • Java版AI五子棋游戏

    Java版AI五子棋游戏

    这篇文章主要为大家详细介绍了Java版AI五子棋游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • 详解Mybatis中万能的Map和模糊查询写法

    详解Mybatis中万能的Map和模糊查询写法

    这篇文章主要介绍了Mybatis中万能的Map和模糊查询写法的相关资料,帮助大家更好的理解和使用Mybatis,感兴趣的朋友可以了解下
    2021-03-03
  • Java序列化中子类、父类构造函数问题实例分析

    Java序列化中子类、父类构造函数问题实例分析

    这篇文章主要介绍了Java序列化中子类、父类构造函数问题,结合实例形式分析了java父类与子类构造函数中序列化接口调用相关操作技巧与使用注意事项,需要的朋友可以参考下
    2019-09-09
  • JSON.toJSONString()空字段不忽略修改的问题

    JSON.toJSONString()空字段不忽略修改的问题

    这篇文章主要介绍了JSON.toJSONString()空字段不忽略修改的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • SpringBoot设置接口超时时间的方法

    SpringBoot设置接口超时时间的方法

    这篇文章主要介绍了SpringBoot设置接口超时时间的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Mybatis-Plus多表关联查询的使用案例解析

    Mybatis-Plus多表关联查询的使用案例解析

    这篇文章主要介绍了Mybatis-Plus多表关联查询的使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • 详细分析Java Lambda表达式

    详细分析Java Lambda表达式

    这篇文章主要介绍了Java Lambda表达式的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • 初识Spring Boot框架和快速入门

    初识Spring Boot框架和快速入门

    这篇文章主要介绍了初识Spring Boot框架学习,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Maven安装过程图文详解

    Maven安装过程图文详解

    这篇文章主要介绍了Maven安装过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-07-07
  • java 遍历MAP的几种方法示例代码

    java 遍历MAP的几种方法示例代码

    本文主要介绍java 遍历MAP的知识资料,这里整理几种方法及实现示例代码,有兴趣的小伙伴可以参考下
    2016-09-09

最新评论