导航:首页 > 编程语言 > javahttp异步

javahttp异步

发布时间:2022-03-11 22:03:29

java怎么同步发送及异步发送短信例子解析

  1. 发送短信的接口
    根据自己的情况选择服务商。

  2. 开发文档
    从开发文档中我们可以看到. 可以直接使用http请求也可以使用WebService请求发送短信. 由于DEMO文件夹下的java和jsp文件夹中的代码都是使用http请求发送短信. 所以这里就不再细说了, 我们使用WebService的方式演示发送短信.

  3. 生成客户端代码

    从接口文档中我们知道它的WebService的WSDL的url为:http://106.ihuyi.cn/webservice/sms.php?WSDL那么我们可以执行下面的命令生成客户端代码:

    wsimport -keep http://106.ihuyi.cn/webservice/sms.php?WSDL

    其中wsimport是JDK自带的工具, -keep url选项是"保留生成的文件". 该命令会在当前目录下生成sms.cn.ihuyi._106包, 以及众多的类. 接下来开始编写我们自己的代码.

  4. 定义接口

    为了方便, 这里我们首先定义一个接口:

    Sms.java
    publicinterfaceSms{
    /**
    *向mobile发送短信,内容为message
    *
    *@parammobile手机号
    *@parammessage短信内容
    *@return成功返回-1,否则返回其他值
    */
    intsendMessage(Stringmobile,Stringmessage);
    }

    这个接口很简单, 只有一个方法. 这个方法用来发送短信.

  5. 同步发送短信

    接下来我们首先实现一个同步发送短信的类:


    IhuyiSmsImpl.java
    {

    privateStringaccount;
    privateStringpassword;

    publicvoidsetAccount(Stringaccount){
    this.account=account;
    }

    publicvoidsetPassword(Stringpassword){
    this.password=password;
    }

    @Override
    publicintsendMessage(Stringmobile,Stringmessage){
    cn.ihuyi._106.Smsfactory=newcn.ihuyi._106.Sms();
    SmsSoapsmsSoap=factory.getSmsSoap();
    SubmitResultsubmit=smsSoap.submit(account,password,mobile,message);
    intcode=submit.getCode();
    if(code==2){
    return-1;
    }
    System.out.println("发送短信失败,code:"+code);
    returncode;
    }
    }
  6. 异步发送短信

    由于发送短信涉及到网络通信, 因此sendMessage方法可能会有一些延迟. 为了改善用户体验, 我们可以使用异步发送短信的方法. 原理很简单: 如果用户请求发送短信, 我们不是直接调用IhuyiSmsImpl的sendMessage方法, 而是将请求保存起来(生产者), 然后告诉用户: 短信发送成功. 之后有若干个消费者取出任务, 调用sendMessage方法发送短信.

    这里, 我使用线程池完成上面的任务:

    AsyncSmsImpl.java
    {
    publicSmssendSms;
    =Executors.newFixedThreadPool(3);

    publicvoidsetSendSms(SmssendSms){
    this.sendSms=sendSms;
    }

    @Override
    publicintsendMessage(Stringmobile,Stringmessage){
    try{
    executorService.submit(()->sendSms.sendMessage(mobile,message));
    }
    catch(Exceptione){
    Sysemt.out.println("提交任务时发生错误"+e);
    return0;
    }
    return-1;
    }

    publicvoiddestroy(){
    try{
    executorService.shutdown();
    }
    catch(Exceptione){}
    }
    }

    在第17行, 我们获得远程对象的一个代理对象. 之后就可以通过这个代理对象进行发送短信, 查询账户余额等操作.

    第18行, 使用该代理对象的submit方法提交了短信内容. 该方法的参数信息及返回值含义在接口文档中有详细的说明.

    第19行我们获得了结果的状态码. 根据文档上的说明, 状态码为2说明提交成功. 简单起见, 这里我们只关注提交成功的情况. 需要注意的是, 状态码为2只是说明提交成功. 根据官网上的"3-5秒内响应、100%到达", 我们可以推测. 如果提交成功, 那么基本上3-5秒内,短信就会发送成功, 根据用户的网络情况, 可能稍有延迟用户就可以收到短信.

    使用这段代码发送短信也很简单, 直接new一个对象, 设置好账号和密码就可以发送短信了.

  7. 代码很简单, 直接将Sms接口的sendMessage(mobile, message)方法作为一个任务加到线程池的任务队列中. 这样等到有空闲线程时, 就会执行sendSms.sendMessage(mobile, message)发送短信. 这里我们假设只要保存到线程池就可以成功发送短信. 因为发送失败的情况实际上很罕见.

㈡ 用在异步任务中用HttpUrlConnection获取json的时候 运行到.connect();就崩溃 求解决

android5.0以后主线程不允许获取网络数据,防止卡顿

㈢ java 原生的httpclient 能支持异步吗

什么版本的java
。。。。。。。。。。
~~~~~~~~~~~~~~

㈣ java springMVC中前端一个发出http请求,请求中有A、B两个操作,B操作比较耗时。

如果A操作和B操作之间没有必然的关系的话,可以对B操作另起一个线程去执行,但是如果两个操作之间存在因果关系的话只能等待

㈤ 你的这个“JAVA多线程处理http请求”怎么处理的我现在也遇到了,能可点思路或dome吗

你的意思是得到很多txt文件后,多线程解析吗?
可以实现,将txt文件编号。
多线程解析后得到想要的(部分数据)。
将(部分数据)根据编号进行组合得到最终数据。
(小难点:如果确认所有的线程都已经执行完毕,再进行数据的组合)

高级点的,在组合时发现某个编号的数据不存在,可以重新解析,如果解析不成功,可以返回错误数据,指明是哪个txt文件的哪儿有问题。

㈥ java多线程,调用http接口报错,java.net.ConnectException: Connection refused: connect

能成功首先排除防火墙或端口开发问题;
其次确定你连接的端口是否有最大连接数限制(类似mysql有最大连接线程数);
还有就是对应服务的拒绝策略是啥,默认丢弃

㈦ java关于异步请求http接口

异步请求,那就是开启一条线程来发个http请求
等这条线程得到数据后,再通知主线程
android上的话,就有一个异步任务AnsyTask就是用来处理异步任务了

㈧ 在java中是否可以通过javax.servlet.http.HttpServletRequest对象判断请求是否是异步请求啊

推荐你在异步提交时,多提交一个参数isAJAX=true;
然后,在过滤器中判断这个参数来决定过不过滤。

㈨ 如何使用java多线程处理http请求,求思路

1、先说长连接吧,如果TCP协议的话长连接可以通过心跳包来实现。 2、推送的话,这个可以弄一个定时器,来控制线程,推送发送完毕,线程stop()。

㈩ java httpclient 并发量大怎么办

java httpclient 并发量大解决办法:
首先你要增加一个关于异步IO需要的包:

1、async-http-client包,可以在这里下载:https://oss.sonatype.org/content/repositories/releases/com/ning/async-http-client/1.6.2/
2、log4j的包,这个不用我说了,都知道在哪里
3、slf4j-spi 的包,目前用1.5以上的版本比较多。
4、slf4j-log4j 的包,可以看出,slf4j是在log4j基础上包装的。
OK,就这几个了,弄好后再看看下面这段代码,通过使用它,性能可以得到明显改善:

[java] view plain
AsyncHttpClient client = new AsyncHttpClient();
try {
Future<Response> f = client.prepareGet("http://www.google.com.hk/").execute();
System.out.println(f.get().getResponseBody("Big5"));//谷歌的输出编码集为Big5,反向解析结果的时候使用
}catch(...) {....}

这段代码是不是超级简单,可以通过上面描述的三种方式:
1、直接调用
2、将GetMethod或PostMethod对象作为共享对象反复使用。
3、使用AsyncHttpClient
这三种方法,非别使用一次调用、循环多次调用、并发调用来测试性能,后面两者的性能比第一种方法的性能要高很多。

阅读全文

与javahttp异步相关的资料

热点内容
优信二手车解压后过户 浏览:62
Windows常用c编译器 浏览:778
关于改善国家网络安全的行政命令 浏览:833
安卓如何下载网易荒野pc服 浏览:654
javainetaddress 浏览:104
苹果4s固件下载完了怎么解压 浏览:1003
命令zpa 浏览:286
python编译器小程序 浏览:945
在app上看视频怎么光线调暗 浏览:540
可以中文解压的解压软件 浏览:593
安卓卸载组件应用怎么安装 浏览:913
使用面向对象编程的方式 浏览:340
程序员项目经理的年终总结范文 浏览:930
内衣的加密设计用来干嘛的 浏览:433
淮安数据加密 浏览:292
魔高一丈指标源码 浏览:982
松下php研究所 浏览:168
c回调java 浏览:401
梦幻端游长安地图互通源码 浏览:746
电脑本地文件如何上传服务器 浏览:314