当前位置: 首页 > news >正文

前端js需要连接后端c#的wss服务

背景

前端js需要连接后端wss服务

前端:js
后端:c# - 控制台搭建wss服务器

步骤1

wss需要ssl认证,所以需要个证书,随便找一台linux的服务器(windows的话,自己安装下openssl即可),一般都有安装openssl的工具,利用它来生成一份证书

 1、最好是cd到一个自定义目录下操作,后面生成的3个文件都在这里的
       生成.key文件,要求输入一个自定义的密码,输入2遍,至少4位,假设这里我们输入的是:123456,因为后面移除key文件的密码时需要
    openssl genrsa -des3 -out server.key 2048
    
   2、生成.crt文件,默认给他10年有效期,随便霍霍造,会提示输入密码,也就是上面key的密码,123456,后面按需要会提示输入一些信息,自己酌情即可,想省略的话输入.即可
    openssl req -new -x509 -key server.key -out server.crt -days 3650
    
    ...
    Common Name (eg, your name or your server's hostname) []:xl
    这一项最好是写点东西,安装的时候会提示证书颁发给和颁发者,后续如果在windows里面导的话,更容易找到,当然,不写也没有关系的
    ...
    
    3、生成.pfx文件(上面2个主要是前端nginx配置需要,pfx这个主要是给c#用的,用来加载到程序里,它相当于是key和crt的集合体)
    openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
    
    会提示输入密码之类的,
    Enter pass phrase for server.key:  这个是上面key的密码,也就是123456
    Enter Export Password: 这个是区别key的,打开pfx的密码,为了放置错乱,最好也设置成123456
    Verifying - Enter Export Password: 确认输入一次pfx的密码
    
    完事后,目录下就生成3个文件了应该
    
    4、取消掉key文件的密码限制,不然nginx每次启动都会要求输入密码的
    openssl rsa -in server.key -out server.key
    
    会提示输入密码,输入即可,123456嘛,完了后面都不用输入密码了,我在想是不是可以key生成了就把密码给他移除掉,后面就不用再输入那么多次密码了,可以试试后面...

步骤2

nginx配置ssl

        打开nginx配置文件如下:

server {
    listen       443 ssl;  # 端口看你心情,端口后面 ssl必须要加上
    server_name  localhost;
    
    ssl_certificate   F:\SourceCode\XL\VUE\dccsplayer\dist\ssl\server.crt;  #指定一下你的证书路径
    ssl_certificate_key  F:\SourceCode\XL\VUE\dccsplayer\dist\ssl\server.key;  #指定一下你的key路径


    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X_FORWARDED_PROTO https;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_redirect off;
    
    
    proxy_set_header    Upgrade             $http_upgrade;
    proxy_set_header    Connection          "upgrade";
    
  
    
    location / {
        root   F:\SourceCode\XL\VUE\dccsplayer\dist;  #这个是我的工程导出的目录,替换成你的
        index  index.html index.htm;
        # 配置让Vue Router处理路由
        #try_files $uri $uri/ /index.html; 
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

步骤3

c#代码构建wss服务,Nuget,搜索安装:Fleck

using Fleck;
using Microsoft.VisualBasic;
using System.Diagnostics;
using System.Reflection;
using System.Security.Cryptography.X509Certificates;Console.WriteLine("Hello, World!");string exePath = System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);var location = "wss://0.0.0.0:8972";
WebSocketServer server = new WebSocketServer(location);// ssl配置
server.Certificate = new X509Certificate2(Path.Combine(exePath, "xl", "server.pfx"), "123456");  //配置pfx证书的目录,且配置打开密码
server.EnabledSslProtocols = System.Security.Authentication.SslProtocols.Tls12;//出错后进行重启
server.RestartAfterListenError = true;
//开始监听
server.Start(socket =>
{socket.OnOpen = () =>   //连接建立事件{Console.WriteLine($"有新的连接");};socket.OnClose = () =>  //连接关闭事件{Console.WriteLine($"有连接被关闭");};socket.OnMessage = message =>  //接受客户端网页消息事件{Console.WriteLine($"接受客户端网页消息事件 -> {message}");};socket.OnError = exp =>{Console.WriteLine($"有连接被意外中断");};
});
Console.WriteLine("任意键停止...");
Console.ReadLine();
server.Dispose();

前端js

const ws = new WebSocket('wss://10.6.30.127:8972')ws.onopen = () => {console.log('握手成功')if (ws.readyState == 1) {console.log('连接成功')setInterval(() => {ws.send(`测试发送:${new Date()}`)}, 1000)}}ws.onmessage = (msg) => {console.log('msg', msg)}ws.onerror = (err) => {console.info(err)}

整体效果图:

连接的时候有个警告,不知道为啥还,有知道朋友可以告知下,但是不影响使用 

相关文章:

  • 【3】CICD持续集成-k8s集群中安装Jenkins-agent(主从架构)
  • 【自然语言处理与大模型】大模型参数规模与部署配置调查2025第一季度
  • [特殊字符] 大模型对话风格微调项目实战——模型篇 [特殊字符]✨
  • 深度解析:透过十问十答洞悉大模型SFT的应用策略
  • gem5-gpu教程04 高速缓存一致性协议和缓存拓扑
  • 【电机仿真】MPC模型预测转速、电流双闭环控制器——PMSM有感FOC控制
  • Java面试:探索Spring Boot与微服务的深度挑战
  • 关于编译原理——语义翻译器的设计
  • 图文结合 - 储能系统产品需求文档(PRD)- (慧哥)慧知开源充电桩平台
  • 互联网大厂Java面试:RocketMQ、RabbitMQ与Kafka的深度解析
  • QT6 源(45):分隔条 QSplitter 允许程序的用户修改布局,程序员使用 IDE时,就是分隔条的用户,以及其 QSplitter 源代码
  • MyBatis中的@Param注解-如何传入多个不同类型的参数
  • (09)Vue脚手架的使用(Vite、vue-cli、create-vue)
  • 软件项目实施全流程及交付物清单
  • 逻辑漏洞安全
  • 硬核科普丨2025年安全、高效网络准入控制系统深度解析
  • 配电室安全用电漏电保护装置的安全用电措施
  • 【水印图片文字识别】水印相机拍摄的照片提取重要的信息可以批量改名,批量识别水印文字内容批量给图片改名,基于QT和腾讯OCR的识别方案
  • 2025.04.23华为机考第二题-200分
  • 01 ubuntu中wps桌面快捷键无法使用
  • 中国工程院院士、歼八Ⅱ飞机系统工程副总设计师温俊峰逝世
  • 大理洱源4.8级地震致442户房屋受损,无人员伤亡
  • 停止水资源共享、驱逐武官,印度对巴基斯坦宣布多项反制措施
  • 海南陵水一酒店保洁员调包住客港币,被判刑一年六个月
  • “从山顶到海洋”科技成果科普巡展在重庆启动,免费开放
  • 全球首个AI价值观数据集出炉