第十七节:第七部分:网络通信:TCP通信实现BS架构,线程池优化BS架构

发布于:2025-07-15 ⋅ 阅读:(22) ⋅ 点赞:(0)

BS架构的基本原理

BS架构的基本原理

HTTP协议规定的响应给浏览器的数据格式

HTTP协议规定的响应给浏览器的数据格式

每次通过开新线程来处理需求的弊端

每次通过开新线程来处理需求的弊端

使用线程池进行优化

使用线程池进行优化

需求

需求

代码:

Server类(服务端)

package com.itheima.day7_TCP5;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/*
* 目标:完成TCP通信快速入门-服务端开发。
* */
public class Server {
    public static void main(String[] args) throws Exception {
        System.out.println("---服务端启动成功---");
        //1、创建ServerSocket的对象,同时为服务端注册端口。
        ServerSocket serverSocket = new ServerSocket(8080);
        //创建出一个线程池,负责处理通信管道的任务
        ThreadPoolExecutor pool = new ThreadPoolExecutor(3,3,0, TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(8), Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy());
        while (true) {
            // 2、使用serverSocket对象,调用一个accept方法,等待客户端的连接请求
            Socket socket = serverSocket.accept();
               System.out.println("有人上线了:"+socket.getRemoteSocketAddress());
            //3、把这个客户端对应的socket通信管道,交给一个独立的线程负责处理
            pool.execute(new ServerReaderRunnable(socket));
        }
    }
}

ServerReaderRunnable类(线程池方法)

package com.itheima.day7_TCP5;

import java.io.*;
import java.net.Socket;

public class ServerReaderRunnable implements Runnable{
    private Socket socket;
    public ServerReaderRunnable(Socket socket) {
        this.socket = socket;
    }
    @Override
    public void run() {
        //立即响应一个网页内容:“黑马程序员666"给浏览器展示。
        try {
            OutputStream os = socket.getOutputStream();
            PrintStream ps = new PrintStream(os);
            ps.println("HTTP/1.1 200 OK");
            ps.println("Content-Type: text/html;charset=utf-8");
            ps.println();// 必须换行
            ps.println("<div style='color:red;font-size:120px;text-align:center'>黑马程序员666<div>");
            ps.close();
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

结果


网站公告

今日签到

点亮在社区的每一天
去签到