[NIO]用dawn发送接收HTTP请求

本文介绍了如何利用Dawn NIO底层实现HTTP请求,通过封装简化代码,使得开发者能够专注于业务逻辑处理。通过示例代码演示了从创建TCP连接、发送HTTP请求到接收响应数据的全过程,最终将结果转换为字符串并打印。同时提供了源码链接以便深入学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


下一篇,我们写个简单的服务,一个简单的聊天室服务器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值