侧边栏壁纸
博主头像
飞鸽FlyGo博主等级

致力于成为一名全栈架构师!

  • 累计撰写 13 篇文章
  • 累计创建 6 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

[10] Socket编程HTTP服务

飞鸽FlyGo
2024-01-04 / 0 评论 / 0 点赞 / 515 阅读 / 268 字 / 正在检测是否收录...

简要描述

一、目标 - 实现HTTP服务

  • 不用框架利用Socket编程实现一个HTTP服务框架
  • 实现基本的Request/Response封装
  • 思考IO和线程模型之间的关系

二、网络插槽Socket

三、线程模型

四、NIO+Socket编程

五、简单的Http服务

1、RawHttpServer源码

/**
 * @description: RawHttpServer
 * @author: flygo
 * @time: 2022/4/27 22:20
 */
public class RawHttpServer {

    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8001);

        // Main thread
        while (true) {
            // Blocking...
            // Thread ---> Sleep ---> Other Threads
            var socket = serverSocket.accept();
            System.out.println("A socket created");

            var iptStream = new DataInputStream(socket.getInputStream());
            var bfReader = new BufferedReader(new InputStreamReader(iptStream));

            var requestBuilder = new StringBuilder();

            String line = "";

            // ReadLine -> line end "\n"
            while (!(line = bfReader.readLine()).isBlank()) {
                requestBuilder.append(line + "\n");
            }

            var request = requestBuilder.toString();
            System.out.println(request);

            var bfWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            bfWriter.write("HTTP/1.1 200 ok\n\nHello Word\n");
            bfWriter.flush();;
            bfWriter.close();
        }
    }
}

2、通过curl 访问该HttpServer

$ curl http://localhost:8001

关注与赞助

飞鸽FlyGo官网

官方网站:https://www.liangronghui.com

微信公众号

赞助

码字和开源离不开您的支持,感谢您的赞助和支持。

0

评论区