[NIO]用dawn发送接收HTTP请求
2024-08-31 18:07:10
HTTP协议的下层使用的是tcp。所以我们建立一个tcp连接就能发送接收http请求。dawn底层使用了nio。可是经过dawn的封装之后,我们在编写代码的时候,就和使用普通的堵塞式socket一样
,不须要关注nio的api。
能够把我们的精力放在业务逻辑的处理上。举比例如以下。下例的功能就是取回baidu首页:
package zhmt.dawn.nio; import java.nio.charset.Charset; import zhmt.dawn.nio.buffer.ScalableDirectBuf;
import kilim.Pausable;
import kilim.Scheduler;
import kilim.Task; public class SimpleHttp extends Task {
public static void main(String[] args) {
Scheduler sch = new Scheduler();
sch.start(); SimpleHttp task = new SimpleHttp();
task.startOn(sch);
} /**
* 自己要清楚。这段代码是在调度器中运行的
*/
@Override
public void execute() throws Pausable, Exception {
//创建buffer
ScalableDirectBuf buf = ScalableDirectBuf.allocateFromTlsCache(); //准备http请求数据。这里是訪问首页
byte[] req = "GET / HTTP/1.0\r\n\r\n".getBytes();
buf.wbytes(req, 0, req.length); //创建连接
TcpClientChannel ch = new TcpClientChannel("www.baidu.com", 80, false); //发送http请求
ch.writeAll(buf); //接收全部响应数据,直到收到EOF,由于这里用的是HTTP1.0,所以,非常快就能收到EOF
int n = ch.readSome(buf);
while (n >= 0) {
n = ch.readSome(buf);
} //把结果转成字符串。并打印
String ret = buf.rstr((int) buf.readable(), Charset.forName("utf8"));
System.out.println("===========================");
System.out.println(ret);
System.out.println("==========================="); //释放buffer
buf.release();
//关闭连接
ch.close();
}
}
这个程序,非常直观。我就不多解释了。也能够到github下载源代码:
https://github.com/zhmt/dawn/blob/master/examples/zhmt/dawn/nio/SimpleHttp.java
下一篇。我们写个简单的服务,一个简单的聊天室server。
最新文章
- thinkphp访问不存在的模块或者方法跳转到404页面
- JMeter学习-022-JMeter 分布式测试(性能测试大并发、远程启动解决方案)
- MySQL 安装 + 精简 + 配置
- win7下VS2015+opencv3.1.0配置
- Python3基础 sum,range 计算1到100的和
- 取消界面的title
- Android核心分析之十九电话系统之GSMCallTacker
- VPW Communication Protocol
- Java Web应用中调优线程池的重要性
- eclipse 下生成jar包
- Oracle和MSSQL查询有多少张表
- Discuz!源代码阅读笔记之common.inc.php文件【1】
- Citrix 服务器虚拟化之十一 Xenserver管理vApps
- Android4.0设置界面改动总结(三)
- 简单的iOS抽屉效果
- 【Java框架型项目从入门到装逼】第十二节 项目分层
- Android捕获全局异常
- MySQL/Oracle数据库优化总结
- java 类的初始化顺序
- 中标麒麟(linux)下Qt调用python数据转换