前段时间一看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的更多相关文章

  1. localhost能连接websocket 127.0.0.1 不能连接问题?

    最近开发中遇到一个问题,就是有的浏览器电脑能连接websocket , 有的不能 , 有的能用localhost连接,有的能用127.0.0.1连接,这个问题很奇怪 提供一个很好测试websocket ...

  2. 基于jsmpeg库下使用ffmpeg创建视频流连接websocket中继器传输视频并播放

    这个功能的基本工作是这样的: 1.使用node运行jsmpeg库下的websocket-relay.js文件,这个文件的作用是创建一个websocket视频传输中继器 2.运行ffmpeg,将输出发送 ...

  3. HTTP长连接和短连接 + Websocket

    HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问题,T ...

  4. Unity 连接WebSocket(ws://)服务器

    Unity 连接ws,不用任何插件,忙活了一天终于搞定了,一直连接不上,原来是没有添加header, 代码比较简单,直接贴出来普度众生 using System; using System.Net.W ...

  5. 长连接 Websocket

    import json from flask import Flask,request,render_template from geventwebsocket.handler import WebS ...

  6. 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 ...

  7. jmeter连接websocket wss

    注:域名的默认端口号是443 1.先添加 WebSocket Open Connection:连接请求 2.再添加 WebSocket request-response Sampler:发送数据请求 ...

  8. 体验用yarp当网关

    Yarp是微软开源的一个用.net实现的反向代理工具包,github库就叫reverse-proxy(反向代理)(吐槽一下微软起名字233333) nuget包preview9之前都叫Microsof ...

  9. python连接websocket wss

    def websocket_wss(): try: wss = create_connection(wss_url, timeout=10) if wss.status == 101: wss.sen ...

随机推荐

  1. LINUX系统入侵排查

    当企业发生黑客入侵.系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程,同时给出解决方案与防范措施,为 ...

  2. mac上通过git推送时忽略node_modules文件夹

    node_modules出现改动一般不需要通过git推送,如果不忽略node_modules每次安装新的包会出现几千条新变动,并没有必要推送 1.通过终端进入项目根目录 创建 .gitignore 文 ...

  3. Redis5种常用数据类型的使用以及内部编码

    String 字符串类型是redis的最基本类型,首先无论值是什么数据类型,其键都是字符串,且其他数据类型的数据结构都是在字符串的基础上搭建的,相信读者能够体会到字符串在redis的地位是有多么的重要 ...

  4. 10.7 URI

    URI:   Uniform Resource Identifier  统一资源标识符 URL:  Uniform Resource Locator    统一资源定位符 URN: Uniform R ...

  5. 题解 Christmas Game

    题目传送门 题目大意 给出 \(t\) 个 \(n\) 个点 \(m\) 条边的无向图,每次可以从任意一棵树选择一条边删掉,然后该树不与根(为 \(1\) )联通的部分被删掉.不能操作的人输.问谁有必 ...

  6. JavaScript05

    显示和隐藏 元素的显示和隐藏 元素display属性可控制元素的显示和隐藏,先获取元素对象,再通过点语法调用style对象中的display属性 语法格式: 元素.style.display='non ...

  7. 【UE4 C++ 基础知识】<2> UFUNCTION宏、函数说明符、元数据说明符

    UFunction声明 UFunction 是虚幻引擎4(UE4)反射系统可识别的C++函数.UObject 或蓝图函数库可将成员函数声明为UFunction,方法是将 UFUNCTION 宏放在头文 ...

  8. 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 ...

  9. [no code][scrum meeting] Beta 2

    例会时间:5月14日11:30,主持者:乔玺华 下次例会时间:5月15日11:30,主持者:肖思炀 一.工作汇报 人员 昨日完成任务 明日要完成的任务 乔玺华 - 开issue,分配时间 黎正宇 - ...

  10. 2021.8.12考试总结[NOIP模拟37]

    T1 数列 考场上切掉的简单题. $a$,$b$与数列中数的正负值对答案无关.全当作正数计算即可. $exgcd$解未知数系数为$a$,$b$,加和为$gcd(a,b)$的不定方程组,再枚举每个数.如 ...