Java使用NioSocket手动实现HTTP服务器
短信预约 -IT技能 免费直播动态提醒
NioSocket简单复习
重要概念
NioSocket里面的三个重要概念:Buffer、Channel、Selector
- Buffer为要传输的数据
- Channel为传输数据的通道
- Selector为通道的分配调度者
使用步骤
使用NioSocket实现通信大概如以下步骤:
- ServerSocketChannel可以通过configureBlocking方法来设置是否采用阻塞模式,设置为false后就可以调用register注册Selector,阻塞模式下不可以用Selector。
- 注册后,Selector就可以通过select()来等待请求,通过参数设置等待时长,若传入参数0或者不传入参数,将会采用阻塞模式直到有请求出现。
- 接收到请求后Selector调用selectedKeys方法,返回SelectedKey集合。
- SelectedKey保存了处理当前请求的Channel和Selector,并提供了不同的操作类型。四种操作属性:SelectedKey.OP_ACCEPT、SelectedKey.OP_CONNECT、SelectedKey.OP_READ、SelectedKey.OP_WRITE。
- 通过SelectedKey的isAcceptable、isConnectable、isReadable和isWritable来判断操作类型,并处理相应操作。
- 在相应的Handler中提取SelectedKey中的Channel和Buffer信息并执行相应操作。
实现HTTP
创建HttpServer类作为程序的主要入口
public class HttpServer { public static void main(String[] args) throws Exception{ ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); serverSocketChannel.socket().bind(new InetSocketAddress((8080))); serverSocketChannel.configureBlocking(false); Selector selector = Selector.open(); // It must be ACCEPT, or it will throw exception serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); while(true){ if (selector.select(3000) == 0){ continue; } Iterator<SelectionKey> keyIter = selector.selectedKeys().iterator(); while (keyIter.hasNext()){ SelectionKey key = keyIter.next(); new Thread(new HttpHandler(key)).run(); keyIter.remove(); } } }}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
Java使用NioSocket手动实现HTTP服务器
下载Word文档到电脑,方便收藏和打印~
下载Word文档
猜你喜欢
Java使用NioSocket手动实现HTTP服务器
NioSocket简单复习重要概念NioSocket里面的三个重要概念:Buffer、Channel、Selector Buffer为要传输的数据 Channel为传输数据的通道 Selector为通道的分配调度者使用步骤使用NioS
2023-05-31
2024-04-02
如何使用Java 11 HTTP Client API实现HTTP/2服务器推送
这篇文章将为大家详细讲解有关如何使用Java 11 HTTP Client API实现HTTP/2服务器推送,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。对 HttpUrlConnection 你还有印象
2023-06-02
2024-04-02
在java项目中使用 Socket如何实现模拟一个HTTP服务器
这篇文章给大家介绍在java项目中使用 Socket如何实现模拟一个HTTP服务器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。HTTP基于TCP协议,协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请
2023-05-31
2023-10-24
2023-10-24
2024-04-02
如何通过Java代码实现Jetty的Http服务器
这篇文章主要讲解了“如何通过Java代码实现Jetty的Http服务器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何通过Java代码实现Jetty的Http服务器”吧!Jetty是一个轻
2023-07-02
2024-04-02
2023-06-15
2023-10-27
2024-04-02
如何使用golang中的net/http/httptest.NewServer函数启动临时的HTTP服务器
如何使用golang中的net/http/httptest.NewServer函数启动临时的HTTP服务器在开发Golang的Web应用程序时,有时我们需要启动一个临时的HTTP服务器来进行测试或者模拟某些服务。Golang标准库中的net
2023-11-18
如何使用golang中的net/http/httptest.NewUnstartedServer函数创建未启动的HTTP服务器
如何使用golang中的net/http/httptest.NewUnstartedServer函数创建未启动的HTTP服务器概述:在Golang中,我们可以使用net/http包来构建和处理HTTP服务器。而在进行单元测试时,有时需要创建
2023-11-18
如何使用java实现客户端与服务器
小编给大家分享一下如何使用java实现客户端与服务器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java可以用来干什么Java主要应用于:1. web开发;2.
2023-06-14
Android使用http协议与服务器通信的实例
网上介绍Android上http通信的文章很多,不过大部分只给出了实现代码的片段,一些注意事项和如何设计一个合理的类用来处理所有的http请求以及返回结果,一般都不会提及。因此,自己对此做了些总结,给出了我的一个解决方案。
首先,需要明确一
2022-06-06
Go中怎么用Routines实现高性能HTTP服务器
在Go中使用Routines实现高性能HTTP服务器的步骤如下:1、创建一个HTTP服务器实例并监听指定的端口号:package mainimport ("net/http")func main() {http.HandleFunc(
2024-04-18
2024-04-02
2024-04-02