背景
前端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;
}
}
}
保存后,重启一下nginx,测试下网站能不能访问了

步骤3

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

 1 using Fleck;
2 using Microsoft.VisualBasic;
3 using System.Diagnostics;
4 using System.Reflection;
5 using System.Security.Cryptography.X509Certificates;
6
7 Console.WriteLine("Hello, World!");
8
9 string exePath = System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
10
11 var location = "wss://0.0.0.0:8972";
12 WebSocketServer server = new WebSocketServer(location);
13
14 // ssl配置
15 server.Certificate = new X509Certificate2(Path.Combine(exePath, "xl", "server.pfx"), "123456"); //配置pfx证书的目录,且配置打开密码
16 server.EnabledSslProtocols = System.Security.Authentication.SslProtocols.Tls12;
17
18 //出错后进行重启
19 server.RestartAfterListenError = true;
20 //开始监听
21 server.Start(socket =>
22 {
23 socket.OnOpen = () => //连接建立事件
24 {
25 Console.WriteLine($"有新的连接");
26 };
27 socket.OnClose = () => //连接关闭事件
28 {
29 Console.WriteLine($"有连接被关闭");
30 };
31 socket.OnMessage = message => //接受客户端网页消息事件
32 {
33 Console.WriteLine($"接受客户端网页消息事件 -> {message}");
34 };
35 socket.OnError = exp =>
36 {
37 Console.WriteLine($"有连接被意外中断");
38 };
39 });
40 Console.WriteLine("任意键停止...");
41 Console.ReadLine();
42 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)
}

整体效果图:

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

前端js需要连接后端c#的wss服务的更多相关文章

  1. RSA加密前端JS加密,后端asp.net解密,报异常

    RSA加密前端JS加密,后端asp.net解密,报异常 参考引用:http://www.ohdave.com/rsa/的JS加密库 前端JS加密代码: function GetChangeStr() ...

  2. 前端JS AES加密 后端PHP AES加解密

    <!DOCTYPEhtml> <html> <head> <title>aes demo</title> </head> < ...

  3. RSA前端JS加密,后端JAVA解密实现

    用RSA非对称加密方式实现.后台生成rsa密钥对,然后在页面设置rsa公钥,提交时用公钥加密密码,生成的密文传到后台,后台再用私钥解密,获取密码明文.这样客户端只需要知道rsa加密方式和公钥,前台不知 ...

  4. Updatepanel 后端返回后,在 Updatepanel 内控件的前端 js 失效问题

    实际情况:点击下箭头弹出列表,点击列表上的隐藏按钮隐藏列表. 背景:模块没有使用Js或者Jquery的Ajax功能,而是使用Asp.Net的Ajax控件--UpdatePanel + ScriptMa ...

  5. 前端js上传文件 到后端接收文件

    下面是前端js代码: <html> <head> <meta http-equiv="Content-Type" content="text ...

  6. 转发:RSA实现JS前端加密,PHP后端解密

    web前端,用户注册与登录,不能直接以明文形式提交用户密码,容易被截获,这时就引入RSA. 前端加密 需引入4个JS扩展文件,jsbn.js.prng4.js.rng.js和rsa.js. <h ...

  7. RSA实现JS前端加密,PHP后端解密

    web前端,用户注册与登录,不能直接以明文形式提交用户密码,容易被截获,这时就引入RSA. 前端加密 需引入4个JS扩展文件,jsbn.js.prng4.js.rng.js和rsa.js. <h ...

  8. js前端加密,php后端解密(crypto-js,openssl_decrypt)

    来源:https://blog.csdn.net/morninghapppy/article/details/79044026 案例:https://blog.csdn.net/zhihua_w/ar ...

  9. json处理总结(前端js和后端java)

    前端(js): json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键,下面将介绍两者之间的相互转换. json字符串:var st ...

  10. 前端Js框架汇总

    概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领域心花路放,也是煞是羡慕.寻了寻.net的消息,也是振奋人心,.net co ...

随机推荐

  1. Nacos 从入门到精通-手把手教会你

    Nacos 使用教程 Nacos 是阿里巴巴开源的动态服务发现.配置管理和服务管理平台,旨在帮助您更容易地构建.交付和管理微服务平台.它集成了服务注册与发现.动态配置管理.动态 DNS 服务和服务及元 ...

  2. Calcite 获取jdbc连接流程

    一.类调用 简介:calcite可以连接各数据源,做查询.可以收口查询权限,查询多引擎需求 二. 获取Connection发送的请求 请求介绍文档:https://calcite.apache.org ...

  3. dp 常见套路总结

    dp 里存的东西值域不大的时候,考虑把状态中某一维和 dp 里存的东西交换,进行 dp. 连续段 dp 时,考虑把连续段化为对每个元素考虑接上一个元素. dp 里的值可能存在某个上界,超过这个值一定不 ...

  4. 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-13- iframe操作-中篇(详细教程)

    1.简介 按照计划今天就要用实际的例子进行iframe自动化测试.宏哥还是用之前找到的一个含有iframe的网页(QQ邮箱和163邮箱),别的邮箱宏哥就没有细看了,可能后期这两个邮箱页面优化升级,也就 ...

  5. [ZJOI2015]幻想乡战略游戏 题解

    题目链接:\(luogu\) 声明变量: \(tr1/tr2\):原树/点分树,用链式前向星维护 求链长(包括求 \(lca\)) \(a_i\):原树欧拉序 \(st_{i,j}\):\(RMQ\) ...

  6. 还在手动更改SpringBoot的环境yml配置文件?老鸟带你可视化配置

    问题说明: 在SpringBoot开发时.SpringBoot的特性:'约定大于配置',我们只需要在**application.yml **配置当前的环境变量属与那个文件 比如测试环境 'applic ...

  7. JavaGUI - [03] LayoutManager布局管理器

      Component中有一个方法setBounds()可以设置当前容器的位置和大小,但如果我们手动为组件设置位置和大小的话,就会造成程序的不通用性.LayoutManager布局管理器可以根据运行平 ...

  8. Linux - top相关的快捷键

    q:退出top命令窗口(quit). k:按照进程ID终止(kill)一个进程.例如,你可以输入k,然后输入进程的PID来终止它. r:重新设置进程的优先级.输入r后,你可以输入新的优先级值. f:进 ...

  9. SG定理

    先放一个 SG 函数的定义和 SG 定理 SG 函数: \(SG(p) = \text{mex}\ {SG(t)}\) SG 定理: \(\forall n\) 个独立的子图若 \(SG(1)\ \o ...

  10. 【自荐】一款简洁、开源的在线白板工具 Drawnix

    在线白板工具 Drawnix -- 名字源于绘画(Draw)与凤凰(Phoenix)的灵感交织. Drawnix 的定位是一个开箱即用.开源.免费的在线白板工具产品, 集思维导图.流程图.画笔于一体, ...