http是无状态的连接,不像socket可以有timeout的异常,因此在判断超时上一直比较困扰.
这段时间做j2me的一个小游戏.用到了http连接,学习了论坛上说的一种方法.
"声明一个boolean公共变量,表明当前httpconnection是否得到服务器回应。
你的连接线程中在连接之前置这个变量为false;
另起一个监视线程,拿到那个HttpConnection的连接对象,并循环监视这个boolean公共变量。如果指定时间内(20秒后)你的boolean公共变量还是false,那么就主动置httpconnection=null。这样,那边连接线程就会抛出异常退出来。" -----zhengyun
写了Timer类来实现.(学习国外一个网站上的写法)
class Timer extends Thread {
/** 每个多少毫秒检测一次 */
protected int m_rate = 100;
/** 超时时间长度毫秒计算 */
private int m_length;
/** 已经运行的时间 */
private int m_elapsed;
/**
* 构造函数
*
* @param length
* Length of time before timeout occurs
*/
public Timer(int length) {
// Assign to member variable
m_length = length;
// Set time elapsed
m_elapsed = 0;
}
/**
* 重新计时
*
*/
public synchronized void reset() {
m_elapsed = 0;
System.out.println("reset timer");
}
/**
* 故意设置为超时,可以在服务器有返回,但是错误返回的时候直接调用这个,当成超时处理
*
*/
public synchronized void setTimeOut()
{
m_elapsed = m_length+1;
}
/**
*/
public void run() {
// 循环
System.out.println("timer running");
for (;;) {
// Put the timer to sleep
try {
Thread.sleep(m_rate);
} catch (InterruptedException ioe) {
continue;
}
synchronized (this) {
// Increment time remaining
m_elapsed += m_rate;
// Check to see if the time has been exceeded
if (m_elapsed > m_length && !isConnActive) { //isConnActive 为全局变量
// Trigger a timeout
timeout();
break;
}
}
}
}
/**
* 超时时候的处理
*
*/
public void timeout() {
httpConnection = null;
System.out.println("conn time > " + TIME_OUT + " ms");
}
}
在http连接线程调用的同是调用 new Timer(20*1000).start();
需要重新计时时候调用timer.reset();
不知道大家有没有更好的方法
分享到:
相关推荐
java中处理http连接超时的方法.pdf
java中处理http连接超时的方法借鉴.pdf
在IT领域,尤其是在Java编程中,访问网络、下载文件、实现爬虫功能以及处理超时问题是非常关键的技术点。本文将深入探讨如何在Java中有效处理这些方面的问题,特别是超时处理解决方案,这对于构建高效、稳定的网络...
综上所述,Java实现Socket长连接和短连接涉及网络通信基础、连接管理、异常处理等多个方面,开发者需要根据实际需求权衡选择合适的方式。通过深入理解这些概念和技术,可以有效地优化网络服务,提升应用的性能和用户...
本文将深入探讨Java中如何实现单个线程的执行超时监控。 首先,我们可以使用`java.util.concurrent`包中的`Future`和`ExecutorService`来实现线程超时。`ExecutorService`是一个接口,它提供了管理和控制线程池的...
Java的`Socket`类提供了设置连接超时、读取超时和写入超时的方法。`connect()`方法可以设置连接超时,防止程序在尝试建立连接时无限期等待;`setSoTimeout()`可以设置读取超时,避免在接收数据时卡住。这些设置能够...
使用HikariCP,我们可以定义最大连接数、最小空闲连接数、连接超时时间等参数,然后在需要时通过调用其API获取Socket连接。 以下是一个简单的Socket连接池实现步骤: 1. 初始化连接池:设置最大连接数、最小连接数...
了解并正确使用MongoDB的Java连接池对于提高应用程序性能和稳定性至关重要,特别是在高并发的Web应用或大数据处理项目中。因此,深入理解连接池的工作原理和配置方法,对于任何MongoDB Java开发者来说都是必要的技能...
在Java编程语言中,HTTP(超文本传输协议)连接与浏览是网络编程的重要组成部分,它允许应用程序通过HTTP协议与Web服务器进行通信。本教程将深入探讨如何使用Java实现这一功能,并提供相关的源码下载,帮助开发者更...
本文将深入探讨Java中的Socket连接池及其实现原理。 首先,理解Socket的基础知识至关重要。Socket是网络编程的基本接口,它提供了进程间通信(IPC)的能力,尤其是在互联网上不同主机间的通信。Java中的Socket类和...
Comet 是一种基于 HTTP 的持久化连接技术,允许服务器在客户端保持一个打开的 HTTP 连接,直到有新的数据需要发送或者连接超时。这种模式突破了传统的 HTTP 请求-响应模式,使得服务器可以主动向客户端推送数据,...
3. **连接泄漏自动关闭**:启用连接泄漏自动关闭功能,可以通过设置“非活动连接超时”属性来实现。例如,设置为30秒表示超过30秒未使用的连接将被自动关闭。这一设置有助于减少泄漏连接对资源的影响。 #### 四、...
3. 设置超时时间,通过`setConnectTimeout`方法设定连接超时时间,防止因网络延迟导致程序阻塞。 4. 设置请求方法,通过`setRequestMethod`方法指定是POST还是GET请求。 5. 如果请求参数不为空,将参数编码并拼接成...
Java 网络爬虫连接超时是指在网络爬虫过程中,因服务器端未响应或响应超时而导致的连接失败问题。这种问题经常会发生在网络爬虫程序中,影响爬虫的稳定性和效率。下面我们将通过一个使用 HttpClient 解决连接超时的...
5. **异常处理**:网络连接可能会出现各种异常,如连接超时、主机不可达等。因此,编写网络代码时,必须捕获并适当地处理这些异常。 6. **HTTPS连接**:对于安全的HTTP(HTTPS),Java提供了`SSLSocket`和`...
配置HikariCP时,你可以通过Java代码或者properties文件定义连接池的参数,如最大连接数、连接超时时间等。 在Java中,连接池的使用通常涉及以下步骤: 1. 引入连接池库的依赖。 2. 配置连接池参数,如数据库信息、...
在Java编程中,数据库连接池是一种管理数据库连接的机制,它允许程序重复使用一个已经存在的数据库连接,而不是每次需要访问数据库时都创建新的连接。这极大地提高了应用的性能和效率,因为建立和关闭数据库连接是...