体验用yarp连接websocket
前段时间一看yarp的仓库,wow,终于发布1.0版本了。.net也升级到6版本了,之前一直只是用yarp做HTTP转发,今天刚好试试websocket
话不多说,直接开搞
配置集群
首先先配置集群信息,必填的有
名称
均衡负责策略
集群列表,集群Destinations可以配置多个。

配置路由
重点来了,配置路由转发,需要将HTTP请求升级到WebSocket链接。
这个配置就比正常的Transforms多一点点
除了要添加PathPattern匹配转发规则以外
还需要配置RequestHeader,将请求Upgrade成Websocket
如下图配置

来来开始测试
建个最简单SignalR服务

建个TestHub
using Microsoft.AspNetCore.SignalR;
namespace TestSinganlR
{
public class TestHub : Hub
{
public override Task OnConnectedAsync()
{
Console.WriteLine("````````````````````````````````");
Console.WriteLine("``````````OnConnected```````````");
Console.WriteLine("````````````````````````````````");
return base.OnConnectedAsync();
}
public override Task OnDisconnectedAsync(Exception? exception)
{
Console.WriteLine("````````````````````````````````");
Console.WriteLine("``````````OnDisconnected```````````");
Console.WriteLine("````````````````````````````````");
return base.OnDisconnectedAsync(exception);
}
}
}
顺便提一下.net6新建的web模板真简洁,startup.cs文件都不需要了
配置host,主要添加signalr和websocket支持
using Microsoft.AspNetCore.WebSockets;
using TestSinganlR;
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureServices(services => {
services.AddSignalR();
services.AddWebSockets(options => {
});
}
);
// Add services to the container.
builder.Services.AddRazorPages();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseWebSockets();
app.MapRazorPages();
app.MapHub<TestHub>("testhub");
app.Run();

建个简单的Console Signalr Client
.net6里面连console模板的main函数都不需要,牛皮。
直接就可以写代码
using Microsoft.AspNetCore.SignalR.Client;
var connection = new HubConnectionBuilder()
.WithUrl("http://127.0.0.1:5000/hub/testhub", options => {
options.Transports = Microsoft.AspNetCore.Http.Connections.HttpTransportType.WebSockets;
options.SkipNegotiation = true;
})
.WithAutomaticReconnect()
.Build();
await connection.StartAsync();
Thread.Sleep(int.MaxValue);

启动服务,开测
yarp

signalR

启动console
这时候signalr的控制台输出OnConnected了,说明正确连上了~~

关闭console
这时候signalr的控制台输出OnDisconnected了,说明连接断开了~~

再来看看yarp控制台输出

搞定~
再顺便推推自己封装yarp的一个EFCore储存库和配置界面
上面配置的图片就是yarp的配置界面,配置信息保存在数据库支持热更新
简单无脑上手hhhhh~
仓库地址是这个ReverseProxy.Store
欢迎大佬们一起完善~~
体验用yarp连接websocket的更多相关文章
- localhost能连接websocket 127.0.0.1 不能连接问题?
最近开发中遇到一个问题,就是有的浏览器电脑能连接websocket , 有的不能 , 有的能用localhost连接,有的能用127.0.0.1连接,这个问题很奇怪 提供一个很好测试websocket ...
- 基于jsmpeg库下使用ffmpeg创建视频流连接websocket中继器传输视频并播放
这个功能的基本工作是这样的: 1.使用node运行jsmpeg库下的websocket-relay.js文件,这个文件的作用是创建一个websocket视频传输中继器 2.运行ffmpeg,将输出发送 ...
- HTTP长连接和短连接 + Websocket
HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问题,T ...
- Unity 连接WebSocket(ws://)服务器
Unity 连接ws,不用任何插件,忙活了一天终于搞定了,一直连接不上,原来是没有添加header, 代码比较简单,直接贴出来普度众生 using System; using System.Net.W ...
- 长连接 Websocket
import json from flask import Flask,request,render_template from geventwebsocket.handler import WebS ...
- IE浏览器连接WebSocket报错:java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
在项目开发中整合了WebSocket,本来没什么问题了,但是偶尔发现用IE浏览器打开web端不能推送消息,因为PC端与服务器建立连接失败了.网上查了很多资料, 又看了看源码,都不对症:又怀疑是Spri ...
- jmeter连接websocket wss
注:域名的默认端口号是443 1.先添加 WebSocket Open Connection:连接请求 2.再添加 WebSocket request-response Sampler:发送数据请求 ...
- 体验用yarp当网关
Yarp是微软开源的一个用.net实现的反向代理工具包,github库就叫reverse-proxy(反向代理)(吐槽一下微软起名字233333) nuget包preview9之前都叫Microsof ...
- python连接websocket wss
def websocket_wss(): try: wss = create_connection(wss_url, timeout=10) if wss.status == 101: wss.sen ...
随机推荐
- LINUX系统入侵排查
当企业发生黑客入侵.系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程,同时给出解决方案与防范措施,为 ...
- mac上通过git推送时忽略node_modules文件夹
node_modules出现改动一般不需要通过git推送,如果不忽略node_modules每次安装新的包会出现几千条新变动,并没有必要推送 1.通过终端进入项目根目录 创建 .gitignore 文 ...
- Redis5种常用数据类型的使用以及内部编码
String 字符串类型是redis的最基本类型,首先无论值是什么数据类型,其键都是字符串,且其他数据类型的数据结构都是在字符串的基础上搭建的,相信读者能够体会到字符串在redis的地位是有多么的重要 ...
- 10.7 URI
URI: Uniform Resource Identifier 统一资源标识符 URL: Uniform Resource Locator 统一资源定位符 URN: Uniform R ...
- 题解 Christmas Game
题目传送门 题目大意 给出 \(t\) 个 \(n\) 个点 \(m\) 条边的无向图,每次可以从任意一棵树选择一条边删掉,然后该树不与根(为 \(1\) )联通的部分被删掉.不能操作的人输.问谁有必 ...
- JavaScript05
显示和隐藏 元素的显示和隐藏 元素display属性可控制元素的显示和隐藏,先获取元素对象,再通过点语法调用style对象中的display属性 语法格式: 元素.style.display='non ...
- 【UE4 C++ 基础知识】<2> UFUNCTION宏、函数说明符、元数据说明符
UFunction声明 UFunction 是虚幻引擎4(UE4)反射系统可识别的C++函数.UObject 或蓝图函数库可将成员函数声明为UFunction,方法是将 UFUNCTION 宏放在头文 ...
- python打印爱心
print('\n'.join([''.join([('AndyLove'[(x-y)%8]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 ...
- [no code][scrum meeting] Beta 2
例会时间:5月14日11:30,主持者:乔玺华 下次例会时间:5月15日11:30,主持者:肖思炀 一.工作汇报 人员 昨日完成任务 明日要完成的任务 乔玺华 - 开issue,分配时间 黎正宇 - ...
- 2021.8.12考试总结[NOIP模拟37]
T1 数列 考场上切掉的简单题. $a$,$b$与数列中数的正负值对答案无关.全当作正数计算即可. $exgcd$解未知数系数为$a$,$b$,加和为$gcd(a,b)$的不定方程组,再枚举每个数.如 ...