一、SignalR服务端
1、新建Asp.Net Core 空模板
2、 修改launchsettings.json文件
{
"profiles": {
"SignalRSeverCore": {
"commandName": "Project",
"dotnetRunMessages": "true",
"launchBrowser": false,
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
3、添加TestHub.cs 类
public class TestHub : Hub
{
public async Task Send(string name, string message)
{
Console.WriteLine($"用户名称{name},收到消息{message}");
await Clients.All.SendAsync("myMessage", name, message);
}
public override async Task OnConnectedAsync()
{
Console.WriteLine($"建立连接{Context.ConnectionId}");
await Groups.AddToGroupAsync(Context.ConnectionId, "SignalR Users");
await base.OnConnectedAsync();
}
public override async Task OnDisconnectedAsync(Exception exception)
{
Console.WriteLine($"断开连接{Context.ConnectionId}");
await Groups.RemoveFromGroupAsync(Context.ConnectionId, "SignalR Users");
await base.OnDisconnectedAsync(exception);
}
}
4、修改 Startup.cs 类
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<TestHub>("/myTestHub");
});
}
}
二、SignalR 客户端
1、新建 .Net Core平台下的控制台应用程序
2、Nuget包下载安装
Microsoft.AspNetCore.SignalR.Client
3、修改Program.cs 文件
class Program
{
const string url = @"http://127.0.0.1:5000/myTestHub";
static async Task Main(string[] args)
{
Console.WriteLine("Hello World!");
HubConnection hubConnection = new HubConnectionBuilder()
.WithUrl(url)
.Build();
hubConnection.On<string, string>("myMessage", (s1, s2) =>
OnSend(s1, s2)
);
hubConnection.Closed += HubConnection_Closed;
await hubConnection.StartAsync();
Console.WriteLine($"连接状态:{hubConnection.State}");
await hubConnection.InvokeAsync("Send", "Test1", "Hello World");
var command = Console.ReadLine();
if (command == "exit")
{
await hubConnection.StopAsync();
}
Console.ReadKey();
}
private static System.Threading.Tasks.Task HubConnection_Closed(Exception arg)
{
return Task.Run(() =>
{
Console.WriteLine($"连接断开");
Console.WriteLine(arg.Message);
});
}
private static void OnSend(string s1, string s2)
{
Console.WriteLine($"用户名称{s1},消息内容{s2}");
}
}