SingalR实现简单的聊天室

SingalR实现简单的聊天室

SignalR服务端

新建一个ASP.NET Core Web API项目
SingalR实现简单的聊天室_第1张图片
给项目命名为TestSignalRServer
SingalR实现简单的聊天室_第2张图片
将https取消勾选
SingalR实现简单的聊天室_第3张图片
之后点击创建

项目创建完成后,新建一个ChatHub类,这个类需要继承Hub,这样就可以调用客户端方法了
SingalR实现简单的聊天室_第4张图片

using Microsoft.AspNetCore.SignalR;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace TestSignalRServer
{
     
  public class ChatHub : Hub
  {
     
    public Task SendMessage(string username, string message)
    {
     
      //调用客户端的RecieveMessage方法
      return Clients.All.SendAsync("ReceiveMessage", username, message);
    }
  }
}

创建一个Hub类还不够,要想让其生效,还需要在Startup.cs中增加两行代码

一是注册SignalR服务
SingalR实现简单的聊天室_第5张图片
二是使用SignalR中间件
SingalR实现简单的聊天室_第6张图片
启动项目,访问/chathub出现以下内容则证明服务器代码没有问题
SingalR实现简单的聊天室_第7张图片

接下来再来写SignalR客户端

新建一个控制台应用程序
SingalR实现简单的聊天室_第8张图片
命名为TestSignalClient1
SingalR实现简单的聊天室_第9张图片
安装Nuget包Microsoft.AspNetCore.SignalR.Client
SingalR实现简单的聊天室_第10张图片
将Program代码替换为以下代码,这样一个张三的客户端就写好了

using Microsoft.AspNetCore.SignalR.Client;
using System;
using System.Threading.Tasks;

namespace TestSignalClient1
{
     
  class Program
  {
     
    static async Task Main(string[] args)
    {
     
      //创建SignalR连接
      var connection = HubConnectionBuilderHttpExtensions.WithUrl(new HubConnectionBuilder(), "http://localhost:4055/chathub")
                                                         .WithAutomaticReconnect().Build();

      //绑定回调事件供服务器端调用
      connection.On("ReceiveMessage", (string user, string message) =>
      {
     
        Console.WriteLine($"{
       user}: {
       message}");
      });

      //启动连接
      await connection.StartAsync();

      //聊天信息
      string message;
      while (true)
      {
     
        //控制台输入聊天信息
        message = Console.ReadLine();

        //调用服务器端的方法
        await connection.InvokeAsync("SendMessage", arg1: "张三", arg2: message);
        //await connection.InvokeCoreAsync(methodName: "SendMessage",
        //                                 args: new object[] { "张三", message });
      }
    }
  }
}

启动服务端和客户端
在控制台输入消息并发送,如果出现以下结果就证明客户端与服务端成功建立连接,并且客户端与服务端能相互调用对方的方法
SingalR实现简单的聊天室_第11张图片
这样一个自言自语的聊天程序就写好了
当然,这看起来很怪,因为聊天一般是两个人以上进行的
因此我们可以仿照张三客户端来写创建一个李四的客户端,来实现张三和李四的聊天

李四的客户端写好后
同时运行服务端和两个客户端
可以看到张三发送消息后李四能收到消息,李四发送消息后张三也能收到消息
SingalR实现简单的聊天室_第12张图片

你可能感兴趣的:(.Net学习笔记,c#,.net)