我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java使用NioSocket手动实现HTTP服务器

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java使用NioSocket手动实现HTTP服务器

NioSocket简单复习

重要概念

NioSocket里面的三个重要概念:Buffer、Channel、Selector

  1. Buffer为要传输的数据
  2. Channel为传输数据的通道
  3. Selector为通道的分配调度者

使用步骤

使用NioSocket实现通信大概如以下步骤:

  1. ServerSocketChannel可以通过configureBlocking方法来设置是否采用阻塞模式,设置为false后就可以调用register注册Selector,阻塞模式下不可以用Selector。
  2. 注册后,Selector就可以通过select()来等待请求,通过参数设置等待时长,若传入参数0或者不传入参数,将会采用阻塞模式直到有请求出现。
  3. 接收到请求后Selector调用selectedKeys方法,返回SelectedKey集合。
  4. SelectedKey保存了处理当前请求的Channel和Selector,并提供了不同的操作类型。四种操作属性:SelectedKey.OP_ACCEPT、SelectedKey.OP_CONNECT、SelectedKey.OP_READ、SelectedKey.OP_WRITE。
  5. 通过SelectedKey的isAcceptable、isConnectable、isReadable和isWritable来判断操作类型,并处理相应操作。
  6. 在相应的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

如何使用Java 11 HTTP Client API实现HTTP/2服务器推送

这篇文章将为大家详细讲解有关如何使用Java 11 HTTP Client API实现HTTP/2服务器推送,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。对 HttpUrlConnection 你还有印象
2023-06-02

在java项目中使用 Socket如何实现模拟一个HTTP服务器

这篇文章给大家介绍在java项目中使用 Socket如何实现模拟一个HTTP服务器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。HTTP基于TCP协议,协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请
2023-05-31

如何通过Java代码实现Jetty的Http服务器

这篇文章主要讲解了“如何通过Java代码实现Jetty的Http服务器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何通过Java代码实现Jetty的Http服务器”吧!Jetty是一个轻
2023-07-02

如何使用golang中的net/http/httptest.NewServer函数启动临时的HTTP服务器

如何使用golang中的net/http/httptest.NewServer函数启动临时的HTTP服务器在开发Golang的Web应用程序时,有时我们需要启动一个临时的HTTP服务器来进行测试或者模拟某些服务。Golang标准库中的net
如何使用golang中的net/http/httptest.NewServer函数启动临时的HTTP服务器
2023-11-18

如何使用golang中的net/http/httptest.NewUnstartedServer函数创建未启动的HTTP服务器

如何使用golang中的net/http/httptest.NewUnstartedServer函数创建未启动的HTTP服务器概述:在Golang中,我们可以使用net/http包来构建和处理HTTP服务器。而在进行单元测试时,有时需要创建
如何使用golang中的net/http/httptest.NewUnstartedServer函数创建未启动的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(
Go中怎么用Routines实现高性能HTTP服务器
2024-04-18

编程热搜

目录