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。

最新文章

  1. thinkphp访问不存在的模块或者方法跳转到404页面
  2. JMeter学习-022-JMeter 分布式测试(性能测试大并发、远程启动解决方案)
  3. MySQL 安装 + 精简 + 配置
  4. win7下VS2015+opencv3.1.0配置
  5. Python3基础 sum,range 计算1到100的和
  6. 取消界面的title
  7. Android核心分析之十九电话系统之GSMCallTacker
  8. VPW Communication Protocol
  9. Java Web应用中调优线程池的重要性
  10. eclipse 下生成jar包
  11. Oracle和MSSQL查询有多少张表
  12. Discuz!源代码阅读笔记之common.inc.php文件【1】
  13. Citrix 服务器虚拟化之十一 Xenserver管理vApps
  14. Android4.0设置界面改动总结(三)
  15. 简单的iOS抽屉效果
  16. 【Java框架型项目从入门到装逼】第十二节 项目分层
  17. Android捕获全局异常
  18. MySQL/Oracle数据库优化总结
  19. java 类的初始化顺序
  20. 中标麒麟(linux)下Qt调用python数据转换

热门文章

  1. IFC数据模式架构的四个概念层
  2. 【DRF解析器和渲染器】
  3. linux系统下的/proc目录介绍
  4. C# WinForm设置透明
  5. 洛谷P1622 释放囚犯
  6. C#之菜单控件、主窗体打开子窗体、GroupBox控件使用
  7. action中json的应用
  8. 【iOS开发-29】解决方式:TabBar的图片不显示,仅仅显示灰色的正方形
  9. RocketMQ集群消费的那些事
  10. 83.#pragma详解