windows NGIMX配置WebSocket反向代理

linux下 据说nginx是要有 stream的模块

Linux安装Nginx步骤之后续,带stream模块-CSDN博客

Nginx从1.3.13版本就开始支持WebSocket

linux 下参考如下链接

配置 Nginx 反向代理 WebSocket - 哈喽哈喽111111 - 博客园 (cnblogs.com)

SSL的配置参考

【Linux】采用nginx反向代理让websocket 支持 wss-CSDN博客

 需要确定Nginx是否支持socket

nginx 配置可以参考如下

windows 中我的测试版本是  nginx 1.25.4

nginx 配置文件

完整配置文件

worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;server {listen       801;server_name  localhost;# 自己nginx想暴漏的前缀,随便写location ^~ /wsxxyy {# 这里是 后端java暴漏的完整的socket的路径 socket1 是上下文路径# wsxx 是wesocket的访问路径proxy_pass http://127.0.0.1:10018/socket1/wsxx;proxy_http_version 1.1;proxy_set_header Host $host;# 超时  传输文件大小 根据自己业务添加就行,这个不影响简单socket测通client_max_body_size  300m;proxy_connect_timeout 300s;proxy_send_timeout 300s;proxy_read_timeout 300s;# 下面的必须加proxy_set_header Upgrade "websocket";proxy_set_header Upgrade "upgrade";proxy_set_header Connection "upgrade";}}
}

完整配置文件

java 端代码 

 maven 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.xxx</groupId><artifactId>socket</artifactId><version>0.0.1-SNAPSHOT</version><name>socket</name><description>socket</description><properties><!-- 不一定用 jdk 22 --><java.version>22</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.32</version><scope>compile</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;@Configuration
public class WebSocketConfig {@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}
}
import jakarta.websocket.Session;
import lombok.extern.slf4j.Slf4j;import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArraySet;@Slf4j
public class WebSocketManager {private final static CopyOnWriteArraySet<WebSocketServer> webSocketServerSet = new CopyOnWriteArraySet<>();private final static ConcurrentHashMap<String, WebSocketServer> webSocketServerMap = new ConcurrentHashMap<>();public static void addWebSocketServer(WebSocketServer webSocketServer){if (webSocketServer != null){webSocketServerSet.add(webSocketServer);webSocketServerMap.put(webSocketServer.getSessionId(), webSocketServer);}}public static void removeWebSocketServer(WebSocketServer webSocketServer){webSocketServerSet.remove(webSocketServer);webSocketServerMap.remove(webSocketServer.getSessionId());}/*** 通过SessionId发送消息给特定用户* @param* @param msg*/public static void sentToUser(String sessionId, String msg){Session session = webSocketServerMap.get(sessionId).getSession();sentToUser(session, msg);}/*** 通过Session发送消息给特定用户* @param session* @param msg*/public static void sentToUser(Session session, String msg){if (session == null){log.error("不存在该Session,无法发送消息");return;}session.getAsyncRemote().sendText(msg);}/*** 发送消息给所有用户* @param msg*/public static void sentToAllUser(String msg){for (WebSocketServer webSocketServer : webSocketServerSet) {sentToUser(webSocketServer.getSession(), msg);}log.info("向所有用户发送WebSocket消息完毕,消息:{}", msg);}
}
import jakarta.websocket.*;
import jakarta.websocket.server.ServerEndpoint;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;@Slf4j
@Component
@ServerEndpoint("/wsxx")
public class WebSocketServer {private Session session;@OnOpenpublic void onOpen(Session session) {this.session = session;WebSocketManager.sentToUser(session, "WebSocket is connected!");WebSocketManager.addWebSocketServer(this);log.info("与SessionId:{}建立连接", session.getId());}@OnClosepublic void onClose() {WebSocketManager.removeWebSocketServer(this);log.info("WebSocket连接关闭");}@OnMessagepublic void onMessage(String message, Session session) throws InterruptedException {log.info("来自SessionId:{}的消息:{}", session.getId(), message);while(true){WebSocketManager.sentToUser(session, "服务端接收到你的消息->" + message + "-" + System.currentTimeMillis());Thread.sleep(1000);}}@OnErrorpublic void onError(Session session, Throwable error) {log.error("Session:{}的WebSocket发生错误", session.getId(), error);}public Session getSession() {return session;}public String getSessionId() {return session.getId();}
}
spring:application:name: socket
server:port: 10018servlet:context-path: /socket1

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

三种读取配置文件的方式

在编写JDBC的util包以读取文件时&#xff0c;配置文件的位置会影响其读取方式。当前&#xff0c;默认配置文件直接放置在src文件夹下。 当读取.properties文件代码写法为&#xff1a; Properties props new Properties(); props.load(new FileInputStream("db.propertie…

丹摩征文活动|CogVideoX-2b:从安装到上线,轻松搞定全过程!

CogVideoX-2b&#xff1a;从安装到上线&#xff0c;轻松搞定全过程&#xff01; CogVideoX简介 CogVideoX的推出标志着视频生成技术的一次重大突破。过去&#xff0c;如何在保持高效的同时提升视频质量一直是一个难题&#xff0c;但CogVideoX 通过其先进的3D变分自编码器&…

工位管理优化:Spring Boot企业级系统

3系统分析 3.1可行性分析 通过对本企业级工位管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本企业级工位管理系统采用SSM框架&#xff0c;JAVA作为开…

EMQX服务器的搭建,实现本地机和虚拟机之间的MQTT通信(详细教程)

前言 MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的&#xff0c;这些特点使它适用范围非常广泛。 MQTT协议中有三种身份&#xff1a;发布者&#xff08;Publish&#xff09;、代理&#xff08;Broker&#xff09;&#xff08;…

Unity 热更新 之 一篇文章完全入门AssetBundle

本篇知识来源于unity官方手册以及siki学院的相关教程,链接如下,仅作学习分享 AssetBundle&#xff08;创建打包&#xff09;入门学习(基于Unity2017) - SiKi学院|SiKi学堂 - unity|u3d|虚幻|ue4/5|java|python|人工智能|视频教程|在线课程 目录 0.热更新是什么 1.AssetBundl…

图片怎么去水印?5个简单好用的图片去水印方法分享!

在日常生活中&#xff0c;图片水印的去除需求时常涌现&#xff0c;无论是出于个人兴趣还是工作需求&#xff0c;掌握去水印技巧能让我们更自由地利用图片资源。今天&#xff0c;我们为您精心挑选并介绍五种实用的图片去水印方法&#xff0c;让您轻松上手&#xff0c;即刻提升图…

半导体测试领域CP和KGD的区别

在半导体测试领域&#xff0c;KGD&#xff08;Known Good Die&#xff09;和 CP&#xff08;Chip Probing 或 Chip Test&#xff09;是两个重要的概念&#xff0c;它们分别代表了不同阶段的测试和验证过程。下面详细解释这两者的区别&#xff1a; CP&#xff08;Chip Probing …

人机融合智能中的系统与还原

一、人工智能中的系统与还原 人工智能&#xff08;AI&#xff09;作为现代科技的重要组成部分和应用涉及多个学领域&#xff0c;包括计算机科学、学、神经科学等人工智能的研究中系统的概念至关重要。系统不仅仅是简单的组件集合&#xff0c;更多地体现为各个部分之间的相互作用…

这可能是2024年看过最全最详细的Java面试八股文

前言: 本文收集整理了各大厂常见面试题 N 道&#xff0c;你想要的这里都有内容涵盖&#xff1a;Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈&#xff0c;希望大家都能找到…

010_SSH_Sqlserver多媒体技术与应用课程网(学习资料+前台考试)_lwplus87

目 录 摘 要... III Abstract V 第1章 概述... 1 1.1 课题背景... 1 1.2 课题意义... 2 1.3开发工具及技术... 2 1.3.1 MyEclipse. 2 1.3.2 Tomcat 2 1.3.3 SqlServer 3 1.3.4 JSP. 3 1.4国内外现状... 4 第2章 可行性分析及总体设计原则... 5 2.1可行性分析…

免费数字孪生平台打造物流数据可视化大屏,助力消费跑出加速度

在当今快速发展的时代&#xff0c;物流行业已成为连接生产与消费的重要桥梁。2024年&#xff0c;中国物流行业再次刷新纪录&#xff0c;8月13日&#xff0c;我国第1000亿件快递已顺利产生&#xff0c;比2023年提前了71天&#xff0c;这一速度令人惊叹。而在这背后&#xff0c;物…

Navict15 过期处理删除注册表

1.winR 注册表输入regedit 2.搜索输入HKEY_CURRENT_USER\Software\PremiumSoft\Navicat 3.输入HKEY_CURRENT_USER\Software\Classes\CLSID&#xff0c;找到只有一个info的&#xff0c;把包含info的这个文件夹删了。

计算机网络:运输层 —— TCP/IP运输层中的两个重要协议

文章目录 TCP 协议工作方式建立连接&#xff08;三次握手&#xff09;释放连接&#xff08;四次挥手&#xff09; 首部格式 UDP 协议首部格式适用场景 TCP 与 UDP 的对比无连接的UDP和面向连接的TCP对单播、多播和广播的支持情况对应用层报文的处理对数据传输可靠性的支持情况U…

OpenCV4.8 开发实战系列专栏之 13 - 图像翻转(Image Flip)

大家好&#xff0c;欢迎大家学习OpenCV4.8 开发实战专栏&#xff0c;长期更新&#xff0c;不断分享源码。 专栏代码全部基于C 与Python双语演示&#xff0c;专栏答疑群 请联系微信 OpenCVXueTang_Asst 本文关键知识点&#xff1a;图像翻转(Image Flip) 图像翻转的本质像素映…

内网基本概念及知识

参考&#xff1a; 微信公众号&#xff1a;网络安全自修室 1. 内网概述 内网也指局域网&#xff08;Local Area Network&#xff0c;LAN&#xff09;&#xff0c;即在某一区域内由多台计算机互联成的计算机组。一般是方圆几千米以内。局域网可以实现文件管理&#xff0c;应用软…

【JAVA】使用IDEA创建maven聚合项目

【JAVA】使用IDEA创建maven聚合项目 1.效果图 2.创建父模块项目 2.1删除父模块下面的src目录以及不需要的maven依赖 3创建子模块项目 3.1右击父模块项目选择Module… 3.2创建子模块 3.3删除子模块下不需要的maven依赖 4.子模块创建完成后引入SpringBoot依赖启动项目

wordpress搭建主题可配置json

网站首页展示 在线访问链接 http://dahua.bloggo.chat/ 配置json文件 我使用的是argon主题&#xff0c;你需要先安装好主题&#xff0c;然后可以导入我的json文件一键配置。 需要json界面配置文件的&#xff0c;可以在评论区回复&#xff0c;看见评论我会私发给你。~

员工利用公司资源做自己生意违法吗?怎么预防?答案揭秘:违法!只需这样做!

各位企业大佬们&#xff0c;你的员工有没有心怀不轨&#xff0c;试图利用职务之便&#xff0c;将公司的资源挪作私用&#xff0c;甚至做起自己的生意呢&#xff1f; 老板&#xff1a;这把心酸泪&#xff0c;我都不想说...... 那么&#xff0c;员工利用公司资源做自己生意是否违…

模型再训练软件环境部署说明

什么时候需要看这个文档&#xff1f; 使用exe在windows预测或者训练paddleClas模型时候&#xff0c;本地环境配置的时候。 主机要求 硬件 系统&#xff1a;windows10以上Nvidia显卡数量&#xff1a;1&#xff08;仅支持单卡&#xff09;内存容量&#xff1a;至少32G硬盘容量…

ubuntu系统没有/var/log/messages日志文件解决方法

高版本ubuntu系统默认没有 /var/log/messages&#xff0c;因为在 /etc/rsyslog.d/50-default.conf 文件中&#xff0c;将其注释掉了。如下图 所以需修改该配置文件&#xff0c;将注释放开。 然后重启rsyslog服务即可。 systemctl restart rsyslog.service进入 /var/log/ 目录下…