TCP-模拟BS架构通信

2024-04-25 21:28
文章标签 模拟 通信 架构 tcp bs

本文主要是介绍TCP-模拟BS架构通信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

  • bs是通过浏览器进行访问的
  • 每次访问都会开启一个短期的socket用来访问服务器的资源

在这里插入图片描述

响应报文的格式

在这里插入图片描述

服务端

bs架构中的b是浏览器,不需要我们书写,我们只需要书写服务端即可

服务端

public class Server {public static void main(String[] args) {System.out.println("服务启动成功!");//1. 创建一个ServerSocket对象ServerSocket serverSocket = null;try {serverSocket = new ServerSocket(8888);//2. 服务端一直处于监听状态,等待客户端的连接while (true) {//accept()方法是一个阻塞方法,会一直等待客户端的连接new ServerReaderThread(serverSocket.accept()).start();System.out.println("有新的客户端连接上来了!");}} catch (Exception e) {e.printStackTrace();}}
}

服务端读取线程

public class ServerReaderThread extends Thread {private Socket socket;public ServerReaderThread(Socket socket) {this.socket = socket;}@Overridepublic void run() {try (OutputStream outputStream = socket.getOutputStream();// 打印流更容易打印数据PrintStream printStream = new PrintStream(outputStream);) {while (true) {printStream.println("HTTP/1.1 200 OK");printStream.println("Content-Type: text/html; charset=utf-8");// 必须要有空行printStream.println();printStream.println("<h1>hello world</h1>");socket.close(); // 关闭socket}} catch (Exception e) {e.printStackTrace();}}
}

使用线程池优化一下

  • 如果有一万个请求,那就有一万个线程,服务器绝壁挂机
  • 使用线程池优化一下

在这里插入图片描述

服务器端

public class Server {public static void main(String[] args) {System.out.println("服务启动成功!");//1. 创建一个ServerSocket对象ServerSocket serverSocket = null;// 创建一个线程池ThreadPoolExecutor pool = new ThreadPoolExecutor(8 + 1, 8 * 2, 10, TimeUnit.SECONDS,new ArrayBlockingQueue<>(8), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());try {serverSocket = new ServerSocket(8888);//2. 服务端一直处于监听状态,等待客户端的连接while (true) {//accept()方法是一个阻塞方法,会一直等待客户端的连接pool.execute(new ServerReaderThread(serverSocket.accept()));System.out.println("有新的客户端连接上来了!");}} catch (Exception e) {e.printStackTrace();}}
}

这篇关于TCP-模拟BS架构通信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/935838

相关文章

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

基于C#实现MQTT通信实战

《基于C#实现MQTT通信实战》MQTT消息队列遥测传输,在物联网领域应用的很广泛,它是基于Publish/Subscribe模式,具有简单易用,支持QoS,传输效率高的特点,下面我们就来看看C#实现... 目录1、连接主机2、订阅消息3、发布消息MQTT(Message Queueing Telemetr