百度现在位置地图导航怎么查路径图

socket超时机制_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
socket超时机制
上传于|0|0|文档简介
&&socket超时机制
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢posts - 6,&
comments - 1,&
trackbacks - 0
上周乐视网cms香港接口,数据刷新缓慢。香港运营人员一直在群里反馈tv端内容不更新。
我观察了下服务器,发现请求接口耗时很久500~6000ms。之前一般都是100ms左右。
导致很多线程一直在waiting状态,等待网络io。
所以首先找运维解决问题,原来运维人员鸟悄的给我们中港专线限速了,?汗一个。
后来运维给恢复后系统正常。
其实,看到6000ms的时候,心里咯噔一下,我记得我设置的超时时间是5000ms啊(业务需要,单条数据很大)。
原来读取超时时间没生效,只生效了连接超时时间。所以网上找了资料,介绍的很详细,试了下没问题。
尊重博主原创,特贴博客链接。copy下来只怕以后链接失效或删掉。
HttpClient在使用中有两个超时时间,是一直接触和使用的,由于上次工作中使用httpClient造成了系统悲剧的情况,特地对它的两个超时时间进行了小小的测试,在这里记录下。
&& & 测试版本为HttpClient&&3.1
&& & 一:连接超时:connectionTimeout
&& & 1:指的是连接一个url的连接等待时间。
&& & 2:设置方法为:
&& &&public class TestHttpClientMain {
* @param args
public static void main(String[] args) {
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod(
client.getHttpConnectionManager().getParams()
.setConnectionTimeout(3000);
client.getHttpConnectionManager().getParams().setSoTimeout(3000);
int statusCode = client.executeMethod(method);
System.out.println(statusCode);
byte[] responseBody =
responseBody = method.getResponseBody();
String result = new String(responseBody);
System.out.println(result);
} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
&& & 3:测试的时候,将url改为一个不存在的url:&&
&& & 4:超时时间3000ms过后,系统报出异常。
&& &&mons.httpclient.ConnectTimeoutException: The host did not accept the connection within timeout of 3000 ms
at mons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:155)
at mons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:125)
at mons.httpclient.HttpConnection.open(HttpConnection.java:707)
at mons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
at mons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at mons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
&& & 二:读取数据超时:soTimeout
&& & 1:指的是连接上一个url,获取response的返回等待时间
&& & 2:设置方法
&& &&public class TestHttpClientMain {
* @param args
public static void main(String[] args) {
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod(
"http://localhost:8080/firstTest.htm?method=test");
client.getHttpConnectionManager().getParams()
.setConnectionTimeout(3000);
client.getHttpConnectionManager().getParams().setSoTimeout(2000);
int statusCode = client.executeMethod(method);
System.out.println(statusCode);
byte[] responseBody =
responseBody = method.getResponseBody();
String result = new String(responseBody);
System.out.println(result);
} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
&& & 3:测试的时候的连接url为我本地开启的一个url,http://localhost:8080/firstTest.htm?method=test
&& & 在我这个测试url里,当访问到这个链接时,线程sleep一段时间,来模拟返回response超时。
&& &&@RequestMapping(params = "method=test") //&&&②
public String testMethod(ModelMap model) {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("call testMethod method.");
model.addAttribute("name", "test method");
return "test";
&& & 4:将读取response返回超时时间设的时间比那个sleep时间短之后,运行程序给出异常:
&& & &java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at mons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
at mons.httpclient.HttpParser.readLine(HttpParser.java:106)
at mons.httpclient.HttpConnection.readLine(HttpConnection.java:1116)
at mons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1973)
at mons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735)
HttpClient 4:
连接超时:
httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,60000);
HttpConnectionParams.setConnectionTimeout(params,6000);
读取超时:
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,60000);
HttpConnectionParams.setSoTimeout(params,60000);
HttpClient 3:
连接超时:
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(60000);
读取超时:
httpClient.getHttpConnectionManager().getParams().setSoTimeout(60000);
&& & ok,以后再写httpClient这两个超时时间一定要加上,不加就很可能悲剧的了
阅读(...) 评论()Curl&请求本地接口时候超时。_完美佩恩_新浪博客
Curl&请求本地接口时候超时。
curl 请求的时候 如果用post请求,传递参数为 数组的时候 header 头 会被设置为
&multipart/form-data &如果是字符串 形式
header 头会被设置为application/x-www-urlencode
在使用数组传值时,php://input是接收不到数据的​
今天项目中有个问题出现 ,a网站调用b网站 b网站调用远程c网站。在curl返回值中一直出现 超时现象 ,curl
超时有两种
一个是连接超时时间,另一个是数据传输的最大允许时间。
连接超时时间用&--connect-timeout
参数来指定,数据传输的最大允许时间用&
连接超时的话,出错提示形如:
curl: (28) connect() timed out!
数据传输的最大允许时间超时的话,出错提示形如:
curl: (28) Operation timed out after 2000 milliseconds with 0
bytes received
我今天就是出现的第二种错误 原因是 a和b网站都是配置在本地的,我本地是phpstudy
用的是Nginx。​
fastcig-pass的设置值(127.0.0.1:9000)。
设置都是以keepalive方式请求,接收到PHP文件时,交于后端过程PHPCGI解析处理(127.0.0.1:9000),等待响应。
而在本地文件以CURL请求本地环境中PHP文件时,之前的PHP还在等待CURL后的结果,这时9000端口已经被占用。导致CURL一直在处于等待状态。设置了超时时间
curl_setop($ch,CURLOPT_TIMEOUT,20),过了超时时间
就返回&curl: (28) Operation timed out
after 2000 milliseconds with 0 bytes received
我的​解决方案
把b网站的server fastcgi
端口改为了9003
php-cgi.exe -b
127.0.0.1:9003 -c php.ini 运行这个命令 但是cmd 命令窗口不能关闭。
以下摘自网络&
上面用cmd命令行窗口是不是很麻烦,还不能关闭窗口,稍微不注意就悲剧了
可以用下面的一个小工具:RunHiddenConsole
首先你需要下载一个小文件RunHiddenConsole
然后复制到nginx目录,新建两个bat批处理文件,start_nginx.bat和stop_nginx.bat
注意:RunHiddenConsole.exe
&一定要和两个批处理文件在同一级目录下
,否则nginx启动不了
具体两个文件怎么写附件里已经写好了,直接下载就可以了
http://download.csdn.net/download/u05226
原文链接:http://blog.csdn.net/zhaoerduo/article/details/​
博客等级:
博客积分:0
博客访问:2,784
关注人气:0
荣誉徽章:博客分类:&
最近有个需求, 当DB压力过大时获取Connction的时间过慢长时间不返回的话, 就不连接DB了, 研究了好久,DataSource里面的setLoginTimeOut 根本没法用, 刚开始一直纠结在大google搜索&java get connection 超时&答案上, 但始终找不到答案, 偶然尝试了下&java 设置超时& 问题就迎刃而解了.&
java早已经给我们提供了解决方案。jdk1.5自带的并发库中Future类就能满足这个需求。Future类中重要方法包括get()和cancel()。get()获取数据对象,如果数据没有加载,就会阻塞直到取到数据,而 cancel()是取消数据加载。另外一个get(timeout)操作,表示如果在timeout时间内没有取到就失败返回,而不再阻塞。&
看来不能一直纠结在一条道上, 偶尔换个思路还是很有帮助的,& 不多说了, 解决方案如下&
我的code:&
Java代码&&
public&boolean&checkDBStatus()&{&&
&&&&boolean&bdStatus&=&false;&&
&&&&final&ExecutorService&exec&=&Executors.newFixedThreadPool(1);&&
&&&&Callable&String&&call&=&new&Callable&String&()&{&&
&&&&&&&&public&String&call()&throws&Exception&{&&
&&&&&&&&&&&&DataSource&dataSource&=&getJdbcTemplate().getDataSource();&&
&&&&&&&&&&&&Connection&connection&=&dataSource.getConnection();&&
&&&&&&&&&&&&Statement&statement&=&connection.createStatement();&&
&&&&&&&&&&&&statement.executeQuery(&select&*&from&citirisk_menu_node&);&&
&&&&&&&&&&&&return&&true&;&&
&&&&&&&&}&&
&&&&try&{&&
&&&&&&&&Future&String&&future&=&exec.submit(call);&&
&&&&&&&&&&
&&&&&&&&String&obj&=&future.get(1000&*&10,&TimeUnit.MILLISECONDS);&&&
&&&&&&&&bdStatus&=&Boolean.parseBoolean(obj);&&
&&&&&&&&System.out.println(&the&return&value&from&call&is&:&&+&obj);&&
&&&&}&catch&(TimeoutException&ex)&{&&
&&&&&&&&System.out.println(&====================task&time&out===============&);&&
&&&&&&&&ex.printStackTrace();&&
&&&&&&&&bdStatus&=&false;&&
&&&&}&catch&(Exception&e)&{&&
&&&&&&&&System.out.println(&failed&to&handle.&);&&
&&&&&&&&e.printStackTrace();&&
&&&&&&&&bdStatus&=&false;&&
&&&&exec.shutdown();&&
&&&&return&bdS&&
在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent包中。Future接口是Java线程Future模式的实现,可以来进行异步计算。&
Future模式可以这样来描述:我有一个任务,提交给了Future,Future替我完成这个任务。期间我自己可以去做任何想做的事情。一段时间之后,我就便可以从Future那儿取出结果。就相当于下了一张订货单,一段时间后可以拿着提订单来提货,这期间可以干别的任何事情。其中Future 接口就是订货单,真正处理订单的是Executor类,它根据Future接口的要求来生产产品。&
Future接口提供方法来检测任务是否被执行完,等待任务执行完获得结果,也可以设置任务执行的超时时间。这个设置超时的方法就是实现Java程序执行超时的关键。&
Future接口是一个泛型接口,严格的格式应该是Future&V&,其中V代表了Future执行的任务返回值的类型。 Future接口的方法介绍如下:&
&&& boolean cancel (boolean mayInterruptIfRunning) 取消任务的执行。参数指定是否立即中断任务执行,或者等等任务结束&
&&& boolean isCancelled () 任务是否已经取消,任务正常完成前将其取消,则返回 true&
&&& boolean isDone () 任务是否已经完成。需要注意的是如果任务正常终止、异常或取消,都将返回true&
&&& V get () throws InterruptedException, ExecutionException& 等待任务执行结束,然后获得V类型的结果。InterruptedException 线程被中断异常, ExecutionException任务执行异常,如果任务被取消,还会抛出CancellationException&
&&& V get (long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException 同上面的get功能一样,多了设置超时时间。参数timeout指定超时时间,uint指定时间的单位,在枚举类TimeUnit中有相关的定义。如果计算超时,将抛出TimeoutException&
Future的实现类有java.util.concurrent.FutureTask&V&即 javax.swing.SwingWorker&T,V&。通常使用FutureTask来处理我们的任务。FutureTask类同时又实现了Runnable接口,所以可以直接提交给Executor执行。使用FutureTask实现超时执行的代码如下:&
Java代码&&
ExecutorService&executor&=&Executors.newSingleThreadExecutor();&&&&
FutureTask&String&&future&=&&&&
&&&&&&&new&FutureTask&String&(new&Callable&String&()&{&&
&&&&&&&&&public&String&call()&{&&&&
&&&&&&&&&&&&&
&&&&&&&}});&&&&
executor.execute(future);&&&&
&&&&result&=&future.get(5000,&TimeUnit.MILLISECONDS);&&&
}&catch&(InterruptedException&e)&{&&&&
&&&&futureTask.cancel(true);&&&&
}&catch&(ExecutionException&e)&{&&&&
&&&&futureTask.cancel(true);&&&&
}&catch&(TimeoutException&e)&{&&&&
&&&&futureTask.cancel(true);&&&&
}&finally&{&&&&
&&&&executor.shutdown();&&&&
不直接构造Future对象,也可以使用ExecutorService.submit方法来获得Future对象,submit方法即支持以 Callable接口类型,也支持Runnable接口作为参数,具有很大的灵活性。使用示例如下:&
Java代码&&
ExecutorService&executor&=&Executors.newSingleThreadExecutor();&&&&
FutureTask&String&&future&= executor.submit(&&&&
&&&new&Callable&String&()&{&&
&&&&&&&public&String&call()&{&&&&
&&&}});&&&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:13351次
排名:千里之外
转载:24篇
(5)(1)(7)(12)(1)16148人阅读
Linux(13)
&之前大家讨论说pthread_cond_timedwait()接口不能用,如果需要超时返回功能的话必须写一个定时器来实现.但是该操作太昂贵了,其实可以直接使用该接口来实现超时等待功能的,下面描述我对该接口的了解及用法,仅供参考.
1.&&&&POSIX提供了多种时钟类型,其中包括以下两种:
CLOCK_REALTIME:&Systemwide&realtime&clock.&系统范围内的实时时钟,是个软件时钟,可以通过命令等方式修改该系统时间.
CLOCK_MONOTONIC:Represents&monotonic&time.&Cannot&be&set.&表示单调时间,为系统起机时到现在的时间,不能被设置跟修改.
pthread_cond_timedwait()在没有设置条件变量属性的时候,默认用的是CLOCK_REALTIME软件时间,因此在极端情况下会出现实际等待的时间与设置的超时时间不同.
下面介绍下如何正确使用pthread_cond_timedwait()接口
2.&&&&正确使用pthread_cond_timedwait()接口方式即将测量时间参照改为CLOCK_MONOTONIC,这个需要在初始化时设置条件变量的属性,之后再设置超时时间.例子如下:
&&&&ret&=&pthread_condattr_init(&(pthread_info.condattr));
&&&&if&(ret&!=&0)&{
&&&&&&&&exit(1);
ret&=&pthread_condattr_setclock(&(pthread_info.condattr),&CLOCK_MONOTONIC);
ret&=&pthread_cond_init(&(pthread_info.cleanup_queue_wait),&&(pthread_info.condattr));
struct&timespec&
clock_gettime(CLOCK_MONOTONIC,&&tv);
PTHREAD_TASK_DBG(LOGS_DEBUG,&&now&time:%d\n&,&tv.tv_sec);
tv.tv_sec&+=&30;-这里设置30秒后没收到事件超时返回
ret&=&pthread_cond_timedwait(&(pthread_info.cleanup_queue_wait),&&(pthread_info.cleanup_queue_lock),&&tv);
从上可以看出,使用该方式无论对系统时间设置为任何值时,系统运行时间都不会被修订,同时该线程也不会被触发返回,依旧是原先的30秒超时.
3.&&&&其实使用CLOCK_REALTIME作为测量时间参照也是可行的,只是在极端的情况下(如在获取当前系统时间后系统时间马上被修订)时,这个超时时间就不正确了,不过这是小概率事件.
struct&timespec&
tv.tv_sec&=&time(NULL);-极端情况下在获取当前系统时间后系统时间马上被修订
PTHREAD_TASK_DBG(LOGS_DEBUG,&&now&time:%d\n&,&tv.tv_sec);
tv.tv_sec&+=&30;-这里设置30秒后没收到事件超时返回
ret&=&pthread_cond_timedwait(&(pthread_info.cleanup_queue_wait),&&(pthread_info.cleanup_queue_lock),&&tv);
从上面可以看出,使用该方式在线程进入超时等待后,无论将系统时间改成以前后以后的时间,time(NULL)会返回当前设置后的时间,但线程都不会被触发返回.
4.&&&&参考资料:
http://man.chinaunix.net/unix/susv3/functions/pthread_condattr_setclock.html
http://man.chinaunix.net/unix/susv3/functions/pthread_cond_timedwait.html
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:100469次
积分:1243
积分:1243
排名:千里之外
原创:25篇
转载:37篇
(1)(1)(2)(1)(1)(2)(3)(12)(3)(3)(2)(3)(1)(1)(1)(1)(2)(10)(12)

我要回帖

更多关于 如何查看文件保存路径 的文章

 

随机推荐