springboot3.x入门系列【5】支持unix sock 套接字服务

目录

一、简介

二、springBoot3.x 套接字的支持

1. 环境要求

2.  springboot内置tomcat

2.1 支持unix 设置 unixDomainSocketPath

2.2 windows 下unix服务测试

3. springboot外置tomcat 

3.1 tomcat  配置unix socket 套接字

3.2 启动tomcat 服务

3.3 nginx 支持unix 转发

3.4 unix 接口测试

3.5 nginx 路由接口测试

4. unix socket  服务器抓包

4.1 Socat抓包

4.2 tcp 抓包

4.3 查看特定套接字服务

4.4 查看套接字关联所有信息


一、简介

Unix套接字(Unix Sockets),也称为本地套接字,是一种特殊的网络套接字,用于运行在同一台主机上的进程之间的通信。以下是Unix套接字的一些优缺点

优点:

  1. 性能高效

    • Unix套接字避免了内核与用户空间之间的数据复制开销,因为它们运行在同一个操作系统中,这可以提高通信性能。
  2. 速度快

    • 由于避免了网络协议栈的开销,Unix套接字通常比网络套接字(如TCP/IP套接字)具有更快的通信速度。
  3. 简单性

    • Unix套接字的API与传统的套接字API相似,易于理解和使用。
  4. 文件系统集成

    • Unix套接字在文件系统中表现为文件,可以使用标准文件操作进行访问,这使得它们易于管理和访问。
  5. 安全性

    • Unix套接字可以使用文件权限进行保护,只有具有适当权限的用户才能访问套接字。
  6. 支持多种通信协议

    • 支持多种协议,如流式套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM)。
  7. 无网络配置需求

    • 因为它们不依赖于网络协议栈,所以不需要IP地址、端口号等网络配置。

缺点:

  1. 仅限于本地主机

    • Unix套接字不能用于跨网络或跨主机的通信。
  2. 平台依赖性

    • Unix套接字主要在类Unix系统上使用,Windows平台的支持有限。
  3. 可能的文件系统限制

    • 由于Unix套接字在文件系统中表示,它们可能受到文件系统大小和权限的限制。
  4. 安全性限制

    • 虽然可以使用文件权限进行保护,但Unix套接字的安全性不如基于网络的套接字,后者可以使用更复杂的安全机制。
  5. 调试和监控难度

    • 由于Unix套接字的通信在系统内部进行,可能难以使用传统的网络监控工具进行调试和监控。
  6. 生命周期管理

    • 如果使用不当,Unix套接字可能会遗留在文件系统中,需要适当的清理策略来避免资源泄露。
  7. 不支持广播或多播

    • Unix套接字不支持广播或多播通信,这限制了它们在某些场景下的应用。

二、springBoot3.x 套接字的支持

1. 环境要求

1.1  unix socket 套接字支持需要jdk16 及上才可以支持;

2.  springboot内置tomcat

2.1 支持unix 设置 unixDomainSocketPath
package com.chopin.uninx.uninx.config;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Component;import java.io.File;
import java.io.IOException;
import java.time.Duration;/*** @class MyTomcatWebServerFactoryCustomizer* @description* @copyright Copyright: 2024-2030* @creator chopin* @create-time 2024/6/21 15:26**/
@Slf4j
@Component
public class MyTomcatWebServerFactoryCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {private static final String DEFAULT_SOCKET_PATH = "D:" + File.separator + "http.sock";/****/@Overridepublic void customize(TomcatServletWebServerFactory factory) {log.info("MyTomcatWebServerFactoryCustomizer  init");factory.addConnectorCustomizers(connector -> {String path = "";String os = System.getProperty("os.name").toLowerCase();if (os.contains("win")) {log.info("Running on Windows");path = DEFAULT_SOCKET_PATH;} else if (os.contains("nux")) {log.info("Running on linux");path = "/opt/http.sock";} else {log.info("OS not recognized");return;}File file = new File(path);if (file.exists()) {log.info("file :{} delete", path);file.delete();}connector.setProperty("unixDomainSocketPath", path);});}
}

服务启动的时候会自动生成sock文件

注!  springboot启动时需要进行检测该文件是否存在,如果存在需要进行删除,不然会提示服务占用

2.2 windows 下unix服务测试

3. springboot外置tomcat 

3.1 tomcat  配置unix socket 套接字

1. 进入tomcat  配置文件

2.配置 unix socket

3) 配置jdk环境

vim setclasspath.sh

4) 配置jvm

vim catalina.sh

3.2 启动tomcat 服务

sh startup.sh  && tail -f ../logs/catalina.out

启动打印套接字地址

注!当服务器存在套接字服务文件时会启动失败

3.3 nginx 支持unix 转发

1) 配置upstream unix

upstream unix {server unix:/opt/cms.sock;}

2) 接口路由

注!(selinux 必须处于关闭状态,不然进行unix转发会提示无权限)

location ^~/sUpms/ {client_max_body_size 30m;proxy_set_header Host $host:$server_port;proxy_set_header X-Forwarded-Host $server_name;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";rewrite ^/sUpms/(.*)$ /sUpms/$1 break;proxy_pass http://unix; #负载均衡配置}
3.4 unix 接口测试
curl --silent -XPOST --unix-socket /opt/cms.sock  -H 'Content-Type: application/json' http://localhost/sUpms/v1/common/getPublicKey
 3.5 nginx 路由接口测试

4. unix socket  服务器抓包

 4.1 Socat抓包

sudo mv /opt/cms.sock   /opt/cms.sock.original

sudo socat -t100 -x -v UNIX-LISTEN:/opt/cms.sock,mode=777,reuseaddr,fork UNIX-CONNECT:/opt/cms.sock.original

4.2 tcp 抓包

1)重命名原来的 socket 文件

sudo mv /opt/cms.sock   /opt/cms.sock.original

2) 创建中间的 tcp socket 并拷贝流量

sudo socat TCP-LISTEN:18089,reuseaddr,fork UNIX-CONNECT:/opt/cms.sock.original &

3)创建原来的 socket 文件并拷贝流量

 sudo socat UNIX-LISTEN:/opt/cms.sock,fork TCP-CONNECT:127.0.0.1:18089 &

4) 使用 tcpdump 在中间的 tcp socket 上抓包

存储为文件

tcpdump -i any -s0 -nn -vv -A -w unix.cap tcp port  18090

实时

tcpdump -i any -s0 -nn -vv -A tcp port  18090

4.3 查看特定套接字服务

启用了sockt 或者tcp抓包会导致命令无效

使用 lsof -U | grep http.sock 

 4.4 查看套接字关联所有信息

 lsof  | grep http.sock

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/411617.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android13固定app方向 强制app方向

总纲 android13 rom 开发总纲说明 1.前言 经常遇到客户有固定或者设置应用方向,不让他们改成其他方向的需求。今天我们就来处理这种问题。 2.问题分析 在 Android 10 之前,显示旋转的处理逻辑分散在多个类和模块中,Android 10 统一了这些逻辑,集中在 DisplayRotation.ja…

MATLAB 沿任意方向分层点云(82)

MATLAB 沿任意方向分层点云(82) 一、算法介绍二、算法实现1.代码2.效果更多内容参考: MATLAB点云处理学习 一、算法介绍 沿着某个方向,将点云分割为多层,每层点云使用不同颜色进行可视化显示,具体代码和不同方向的分层效果如下: 二、算法实现 1.代码 % Load point c…

【文档合集】软件类常用文档整理大全,软件工程,软件项目管理,技术标书方案,模

目的&#xff1a;规范系统开发流程&#xff0c;提高系统开发效率。 立项申请需求分析方案设计方案评审开发调整测试阶段系统培训试运行测试验收投入使用 所有文档过去进主页获取。 获取方式&#xff1a;本文末个人名片直接获取。 软件资料清单列表部分文档清单&#xff1a;工作…

【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch12 随机森林(Random Forest)

系列文章目录 监督学习&#xff1a;参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归&#xff08;SAheart.csv&#xff09; 【学习笔记】 陈强-机器学习-Python-…

(三)、软硬件全开源手表,具有Wi-Fi和蓝牙LE连接,并可连接互联网,超多表盘。(Watchy)

Watchy 是一款具有开源硬件和软件的 E-Ink watch。它采用准系统设计&#xff0c;利用 PCB 作为表身&#xff0c;可以原样佩戴&#xff0c;或进一步定制不同的 3D 打印表壳和表带。这是一款独特的设计&#xff0c;也是一个可穿戴开发平台&#xff0c;让用户可以创造自己的应用。…

【功能自动化】使用HTMLTestRunner生成测试报告

配置环境&#xff1a; 1.部署webtours网站 2.user.txt 3.HTMLTestRunner.py """ A TestRunner for use with the Python unit testing framework. It generates a HTML report to show the result at a glance.The simplest way to use this is to invoke it…

【论文阅读|cryoET】本周粗读汇总

论文1&#xff1a;CryoDRGN-ET&#xff1a;深度重建生成网络以可视化细胞内动态生物分子 Abstract 虽然冷冻电子断层扫描可以以分子分辨率揭示结构&#xff0c;但图像处理算法仍然是解决原位生物分子结构异质性的瓶颈。本文介绍CryoDRGN-ET用于cryoET断层图的异质重建。CryoD…

Figma 替代品 Penpot 安装和使用教程

在设计领域&#xff0c;Figma 无疑是一个巨人。它彻底改变了设计流程&#xff0c;将协作带到了一个全新的高度。然而&#xff0c;随着 Adobe 收购 Figma 的消息传出&#xff0c;许多设计师和开发者开始担心&#xff1a;Figma 未来会如何演变&#xff1f;那些好用的特性会不会被…

灵办AI:解锁办公新境界,让工作更智能、更高效!

在这个信息爆炸的时代&#xff0c;我们每个人都在寻找能够提升效率、简化工作流程的工具。如果您正在寻找一个能够全方位提升工作效率的AI助手&#xff0c;那么灵办AI绝对值得您的关注。 为什么选择灵办AI&#xff1f; 在众多AI工具中&#xff0c;灵办AI凭借其卓越的性能和独…

简单的C程序基础知识

C程序大致分为3种基本结构&#xff1a; 顺序结构、分支结构、循环结构 由这3种结构可以组成各式各样的复杂程序。 01--C语句 C语句分为以下几类&#xff1a; ①表达式语句 ②函数调用语句 ③控制语句 ④复合语句 ⑤空语句 1.表达式语句&#xff1a; 由表达式分号组成 表…

ArgoWorkflow教程(三)---使用 Artifacts 实现步骤间文件共享

上一篇我们分析了 Workflow、WorkflowTemplate、template 之间的关系。本篇主要分析如何在 argo-workflow 中使用 S3 存储 artifact 实现步骤之间的文件共享。 本文主要解决两个问题&#xff1a; 1&#xff09;artifact-repository 如何配置2&#xff09;Workflow 中如何使用 …

用AppleScript做macOS UI自动化

用AppleScript做macOS UI自动化 一、定位到System Setting → General → Login Items& Extensions 页面1. 获取页面锚点&#xff0c;以便直接滑动到锚点区域2. 滑动到Extensions 区域 二、根据名称找到元素&#xff0c;再点击元素的按钮三、获取元素位置并点击 一、定位到…

Datawhale X 李宏毅苹果书 AI夏令营 Task2笔记

Datawhale X 李宏毅苹果书 向李宏毅学深度学习&#xff08;进阶&#xff09; 是 Datawhale 2024 年 AI 夏令营第五期的学习活动&#xff08;“深度学习 进阶”方向&#xff09; 往期task1链接&#xff1a;深度学习进阶-Task1 我做的task1的笔记博客&#xff1a;传送门 Datawhal…

【C语言】宏定义详解

目录 C语言宏定义详解1. 宏定义关键词总览2. #define3. #undef4. #ifdef5. #ifndef6. #if7. #else8. #elif9. #endif10. #include11. #error12. #pragma12.1 #pragma once12.2 #pragma pack12.3 #pragma warning12.4 #pragma GCC 13. #line14. 字符串化和标识符连接14.1 字符串…

C# 对桌面快捷方式的操作设置开机启动项

首先在项目中引入Windows Script Host Object Model&#xff0c;引入方式如下图。 对于桌面快捷方式的修改无非就是将现有的快捷方式修改和添加新的快捷方式。 1、遍历桌面快捷方式&#xff0c;代码如下。 string desktopPath Environment.GetFolderPath(Environment.Special…

LLM 应用开发入门 - 实现 langchain.js ChatModel 接入火山引擎大模型和实现一个 CLI 聊天机器人(上)

前言 Langchain 是一个大语言模型(LLM)应用开发的框架,提供了 LLM 开发中各个阶段很多非常强大的辅助工具支持。对于进行 LLM 开发是必不可少的工具库。 本文将通过一个实际的开发例子来入门 LLM 开发基础工具链,并实现 langchain.js ChatModel 接入火山引擎大模型和基于…

【亲测有效】linux抓包http协议分析,分析header和body

linux抓包http协议分析&#xff0c;分析header和body 安装&#xff1a; 执行抓包命令&#xff0c;这里ip要换成你想抓包的目标ip&#xff1a; ngrep -q -W byline -d any "^Host:|^GET|^POST|^HTTP/" tcp and host 183.2.172.42 and port 80 触发抓包&#xff0c;…

FPGA实现多功能SDI视频采集卡,基于GTX+RIFFA架构,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博已有的 SDI 编解码方案 3、详细设计方案设计框图SDI 输入设备Gv8601a 均衡器GTX 解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGBFDMA图像缓存RIFFA用户数据控制RIFFA架构详解Xilinx 7 Series Integrated Bloc…

94522

springboot 广州应用科技学院的教室管理系统 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时…

详细分析Ubuntu中的ufw基本知识

目录 前言1. 基本知识2. 基本使用 前言 由于命令行比较简单&#xff0c;此处主要以表格的形式呈现&#xff0c;还有实战中遇到的一个注意点 1. 基本知识 Ubuntu 中一种用户友好的防火墙配置工具&#xff0c;简化 iptables 的使用&#xff0c;适合那些不熟悉复杂防火墙配置的…