NIO 简单http 服务器

Codex Skill:AI编程助手的专项能力扩展与实战指南 在AI编程助手领域,Skill(技能)是一种标准化的能力扩展机制,它通过封装特定任务所需的指令、资源和脚本,解决AI模型在专项任务上的能力局限。其核心原理是将专业知识和工作流程模块化,让通用AI助手能够像领域专家一样执行复杂任务。从技术价值看,Skill不仅提升了代码生成的准确性,更重要的是实现了业务流程的自动化集成,如代码规范检查、API文档生成等具体场景。这种机制特别适用于需要结合内部工具链和特定业务逻辑的企业环境,能够显著提升开发效率和质量。通过安装PPT生成、SpringBoot项目创建等专项Ski 阅读详情

package normal;

 

import java.io.*;

import java.nio.*;

import java.nio.channels.*;

import java.util.Iterator;

import java.net.*;

 

 

 

@SuppressWarnings("all")

public class NonblockingSingleFileHTTPServer {

 

  private ByteBuffer contentBuffer;

  private int port = 80;

 

  public NonblockingSingleFileHTTPServer(

   ByteBuffer data, String encoding, String MIMEType, int port)

   throws UnsupportedEncodingException {

   

    this.port = port;

    String header = "HTTP/1.0 200 OK/r/n"

     + "Server: OneFile 2.0/r/n"

     + "Content-length: " + data.limit() + "/r/n"

     + "Content-type: " + MIMEType + "/r/n/r/n";

    byte[] headerData = header.getBytes("ASCII");

 

    ByteBuffer buffer = ByteBuffer.allocate(

     data.limit() + headerData.length);

    buffer.put(headerData);

    buffer.put(data);

    buffer.flip();

    this.contentBuffer = buffer;

   

  }

 

  public void run() throws IOException {

 

    ServerSocketChannel serverChannel = ServerSocketChannel.open();

    ServerSocket  serverSocket = serverChannel.socket();

    Selector selector = Selector.open();

    InetSocketAddress localPort = new InetSocketAddress(port);

    serverSocket.bind(localPort);

    serverChannel.configureBlocking(false);

    serverChannel.register(selector, SelectionKey.OP_ACCEPT);

 

    while (true) {

   

      selector.select();

      Iterator keys = selector.selectedKeys().iterator();

      while (keys.hasNext()) {

        SelectionKey key = (SelectionKey) keys.next();

        keys.remove();

        try {

          if (key.isAcceptable()) {

            ServerSocketChannel server = (ServerSocketChannel) key.channel();

            SocketChannel channel = server.accept();

            channel.configureBlocking(false);

            SelectionKey newKey = channel.register(selector, SelectionKey.OP_READ);

          }

          else if (key.isWritable()) {

            SocketChannel channel = (SocketChannel) key.channel();

            ByteBuffer buffer = (ByteBuffer) key.attachment();

            if (buffer.hasRemaining()) {

               channel.write(buffer);  

            }

            else {  // we're done

               channel.close();  

            }

          }

          else if (key.isReadable()) {

            // Don't bother trying to parse the HTTP header.

            // Just read something.

            SocketChannel channel = (SocketChannel) key.channel();

            ByteBuffer buffer = ByteBuffer.allocate(4096);

            channel.read(buffer);

            // switch channel to write-only mode

            key.interestOps(SelectionKey.OP_WRITE);

            key.attach(contentBuffer.duplicate());

          }

        }

        catch (IOException ex) {

          key.cancel();

          try {

            key.channel().close();

          }

          catch (IOException cex) {}

        }

      }

    }

  }

 

  public static void main(String[] args) {

 

    if (args.length == 0) {

      System.out.println(

        "Usage: java NonblockingSingleFileHTTPServer file port encoding");

      return;

    }

     

    try {

      String contentType = "text/plain";

      if (args[0].endsWith(".html") || args[0].endsWith(".htm")) {

        contentType = "text/html";

      }

     

      FileInputStream fin = new FileInputStream(args[0]);

      FileChannel in = fin.getChannel();

      ByteBuffer input = in.map(FileChannel.MapMode.READ_ONLY, 0, in.size());

       

      // set the port to listen on

      int port;

      try {

        port = Integer.parseInt(args[1]);

        if (port < 1 || port > 65535) port = 80;

      } 

      catch (Exception ex) {

        port = 80;

      } 

     

      String encoding = "ASCII";

      if (args.length > 2) encoding = args[2];

      

      NonblockingSingleFileHTTPServer server

       = new NonblockingSingleFileHTTPServer(

         input, encoding, contentType, port);

      server.run();        

 

    }

    catch (Exception ex) {

      ex.printStackTrace();

      System.err.println(ex);

    }

  }

 

}

 

YOLO + SubspaceAD:一张良品图,检出所有未知缺陷 当YOLO遇上子空间建模,工业质检正迎来从“见多识广”到“举一反三”的质变时刻。 阅读详情

相关推荐

保姆级教程:Windows下用GDC-Client下载TCGA数据,从环境变量配置到成功下载

本文提供Windows平台下使用GDC-Client下载TCGA数据的完整教程,从环境变量配置到成功下载。详细介绍了GDC-Client工具的安装、系统环境变量设置、配置文件优化以及数据下载实战技巧,帮助生物信息学研究者高效获取TCGA数据库中的癌症基因组数据。

weixin_42520025的博客 403

okhttp能提升响应速度的原因

一、okhttp能提升响应速度的原因 1、keep-alive机制支持,它能保证已经建立过的连接对于相同的host可以复用,减少重新连接造成的网络耗时。尤其在弱网和HTTPS的环境下,减少连接握手的耗时,可带来更好的用户体验。 (原Apache框架中请求使用完后就使用getConnectionManager().shutdown()关闭了连接,keep-alive无法生效) 2、线程池和链接池的管...

shiningdreamercaihua的博客 3772

BIM模型轻量化避坑指南:Revit导出GLTF常见问题及解决方案

本文深入探讨了BIM模型轻量化过程中,从Revit导出GLTF格式时遇到的常见问题与解决方案。针对文件体积膨胀、材质丢失、属性信息缺失等核心痛点,提供了从数据预处理、Draco几何压缩、纹理优化到Web端性能调优的全流程实战指南,帮助工程师高效实现BIM模型在WebGL环境中的流畅展示与交互。

wdx012345的博客 171

构建高性能的 HTTP 服务器 (一)--初涉Java HTTP 服务器

简介:   Web服务器是指驻留于因特网上某种类型计算机的程序。当Web浏览器(客户端)连到服务器上并请求文件时,服务器将处理该请求并将文件反馈到该浏览器上,附带的信息会告诉浏览器如何查看该文件(即文件类型)。服务器使用HTTP(超文本传输协议)与客户机浏览器进行信息交流,这就是人们常把它们称为HTTP服务器的原因。 一:浏览器的请求头    下面是Firefox浏览器,GET请求的数据

小王同学的博客 2371

基于AIS动态数据与AI结合得经纬度标示算法

港口船舶智能标注系统 本系统通过结合摄像头视频流和AIS船舶动态数据,利用AI技术实现船舶实时标注功能。系统架构包括视频流处理、AIS数据解析、船舶检测匹配和坐标映射转换等模块。关键技术步骤: AIS数据获取:通过本地接收机或网络API获取船舶位置、航速等信息 AI目标检测:采用YOLOv8等模型识别视频中的船舶 船舶匹配算法:通过位置投影或运动轨迹匹配视频目标与AIS数据 坐标映射:使用相机标定技术将经纬度转换为图像坐标 实时标注:在视频画面上叠加船名、位置等关键信息 应用场景包括港口监控、智能海事管理和

qianbo042311的博客 1808

processing与arduino互动编程

Arduino开发板对AVR单片机二次编译封装,无需考虑单片机编程寄存器、地址指针等复杂细节processing借助arduino读取各种传感器的数值,控制各种机电装置。

weixin_45679408的博客 824

OKHttp源码分析---OKIO

简介 JavaNIO和阻塞I/O 阻塞I/O通信模式:调用InputStream.read()方法时是阻塞的,它会一直等到数据来时才返回。 NIO通信模式:在JDK1.4开始,是一种非阻塞I/O,在Java NIO的服务器由一个专门的线程来处理所有I/O事件,并负责分发。线程之间通讯通过wait和notify等方式。 okio okio是由square公司开发的,它补充了java.io和jav...

小薇子的博客 914

debian mirrors 镜像源 riscv 64 赛昉 星光 starfive vf2 InRelease‘ doesn‘t support architecture ‘riscv64‘

debian mirrors 镜像 riscv 64 赛昉 星光2 starfive vf2 InRelease' doesn't support architecture 'riscv64'

qq_29758759的博客 1257

Okhttp 之 okio

本文是的前一篇文章 Okhttp IO 之 Segment &amp; SegmentPool 的基础上写的,如果你没看懂前面的文章,那么看本文会相当的吃力,因为很多关键的代码都是在前面这篇文章中剖析的。 ByteString okio 中添加一个类 ByteString,顾名思义就是字节串,这里做一个概要的讲解,具体的实现大家可以去看源码。 既然是字节串,它内部就是用一个字节数组支持的。 ...

不惜留恋_ 6091

深入解析UEFI PEI阶段:PeiCore的三次调用与内存管理机制

本文深入解析UEFI启动流程中的PEI阶段,重点探讨PeiCore的三次调用与内存管理机制。详细介绍了PeiCore在临时内存中的初始化、堆栈切换至永久内存的过程,以及最终交接给DXE阶段的关键步骤,为开发者提供调试技巧与实战案例,助力解决UEFI启动问题。

weixin_28452161的博客 649

用 ADT 连接 SAP S/4HANA Public Cloud 开发租户的完整落地指南

摘要:在SAP S/4HANA公有云中进行ABAP开发时,必须使用Development Tenant(客户端080)而非Customizing Tenant(客户端100)连接ADT工具。开发用户需具备SAP_BR_DEVELOPER角色且写权限不受限,开发对象应创建在结构包的子包中。连接前需确认正确的ABAP服务URL(通常为Launchpad URL去掉"/ui"),并通过运行控制台程序验证全链路功能。典型开发场景如通过BAdI实现业务校验时,需遵循Clean Core原则在指定包

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 336

Java NIO的简单HTTP服务器实现

用JAVA NIO实现一个最简单的HTTP服务器。 不管浏览器请求什么,都展示Hello, world在浏览器中。 注意点: (1).在处理ACCEPT事件后,只需要往Selector中注册READ操作。不需要注册WRITE操作,因为WRITE操作是随时都可用的。 (2).处理完响应操作,才能关掉客户端的SocketChannel。 OP_WRITE is almost always ready. It rarely if ever makes sense to register for O..

Elivs的博客 1154

Spring AI Alibaba实战训练营-16 NL2SQL (自然语言转 SQL)应用开发指南

本文介绍了一个基于AI的智能BI应用开发项目,主要实现自然语言转SQL(NL2SQL)功能,包含对话模块、MCP模块、向量数据管理模块。项目采用Spring AI Alibaba框架,集成通义千问大模型,支持内存向量库和AnalyticDB向量数据库两种存储方案。重点展示了chat模块的三个控制器实现:AnalyticNl2SqlController用于生产环境,SimpleChatController适用于开发测试,Nl2sqlForGraphController支持基于图的复杂对话流程。系统通过将业务知

program哲学 1585

基于 Java NIO 实现简单的 HTTP 服务器

1.简介 本文是上一篇文章实践篇,在上一篇文章中,我分析了选择器 Selector 的原理。本篇文章,我们来说说 Selector 的应用,如标题所示,这里我基于 Java NIO 实现了一个简单的 HTTP 服务器。在接下来的章节中,我会详细讲解 HTTP 服务器实现的过程。另外,本文所对应的代码已经上传到 GitHub 上了,需要的自取,仓库地址为 toyhttpd。好了,废话不多说...

dishitu6229的博客 464

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

java nio http服务器_基于 Java NIO 实现简单的 HTTP 服务器

1.简介本文是上一篇文章实践篇,在上一篇文章中,我分析了选择器 Selector 的原理。本篇文章,我们来说说 Selector 的应用,如标题所示,这里我基于 Java NIO 实现了一个简单的 HTTP 服务器。在接下来的章节中,我会详细讲解 HTTP 服务器实现的过程。另外,本文所对应的代码已经上传到 GitHub 上了,需要的自取,仓库地址为 toyhttpd。好了,废话不多说,进入正题吧...

weixin_34352633的博客 338

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java http nio_计算机网络(13)-----java nio手动实现简单的http服务器

java nio手动实现简单的http服务器需求分析最近在学习HTTP协议,还是希望动手去做一做,所以就自己实现了一个http服务器,主要功能是将http请求封装httpRequest,通过解析web.xml,用不同的handler处理不同的uri,然后再将封装好的httpResponse还原成http响应返回浏览器。代码已经成功上传至 GitHub如果对你学习JavaNIO有帮助的话,记得给个...

weixin_39757739的博客 185

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java nio 端口_计算机网络(13)-----java nio手动实现简单的http服务器

java nio手动实现简单的http服务器需求分析最近在学习HTTP协议,还是希望动手去做一做,所以就自己实现了一个http服务器,主要功能是将http请求封装httpRequest,通过解析web.xml,用不同的handler处理不同的uri,然后再将封装好的httpResponse还原成http响应返回浏览器。代码已经成功上传至 GitHub如果对你学习JavaNIO有帮助的话,记得给个...

weixin_30278943的博客 161

java nio http服务器_使用NIO建立简单的http服务器

1 importjava.io.IOException;2 importjava.net.InetSocketAddress;3 importjava.nio.ByteBuffer;4 importjava.nio.CharBuffer;5 importjava.nio.channels.SelectionKey;6 importjava.nio.channels.Selector;7 impor...

weixin_39889481的博客 243

使用Java Nio异步套接字实现一个简单的http代理服务器

使用NIO实现的异步简单HTTP代理服务器,不支持HTTPS代理。文件名:Main.javapackage jHttpProxy;import java.io.IOException; import java.net.*; import java.nio.channels.*; import java.util.Iterator;/* * http代理服务器 * @author chenlei1

chenlei1998的博客 1691

使用NIO建立简单的http服务器

NIO同BIO的区别在于NIO的所有操作都可以是非阻塞的,这里尝试将之前用BIO实现的htp服务器改造为用NIO实现,在改造过程中碰到不少问题,只能说知易行难 1 import java.io.IOException; 2 import java.net.InetSocketAddress; 3 import java.nio.ByteBuffer; 4 im...

weixin_30622181的博客 80

java nio http服务器_java nio http服务器(3)简单的Servlet容器

[HTTP是个大协议,完整功能的HTTP服务器必须响应资源请求,将URL转换为本地系统的资源名。响应各种形式的HTTP请求(GET、POST等)。处理不存在的文件请求,返回各种形式的状Servlet容器中放着我们所有要访问的Servlet,根据我们具体的请求来访问不同的Servlet。下面是一个简单的Servlet容器的实现。request和response的封装以及连接器的实现代码这里就不再重复...

weixin_31063029的博客 113

JAVA NIO实现最简单的HTTP服务器

浏览器请求localhost:8899,返回hello,world。

Elivs的博客 286

【挑战学习一百天冲刺实习面试】第二十三天:NIO实现一个简单的HTTP服务器

哈喽

一条小黑龙的博客 149

基于NIO的简单HTTP服务器--反向代理+负载均衡

tuna 是一个基于NIO的简单http服务器,简单的实现了反向代理和负载均衡 这是tuna的配置文件 #this is config file for tuna #some common config keepalived: 5000 username: root password: root proxyServer: tomcatServer: localhost:8081,loc...

lxs的博客 462

java nio http服务器(3)简单的Servlet容器

Servlet容器中放着我们所有要访问的Servlet

貌似君子的专栏 3949
上一篇: 图的深度优先,广度优先
下一篇: selector 的 问题
easyjsf
博客等级 码龄17年 19粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值