ASP.NET Core 2.2 基础知识(十七) SignalR 一个极为大略


玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。

这是一个极为大略的聊天室!

这个例子只是在官方的例子上加了 Group 的用法罢了,主如果官方给的 Group 的例子就两行代码,看不出结果.

第一步:修正 chat.js

"use strict";

//建立一个衔接
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();

//界说客户端的 ReceiveMessage 要领
connection.on("ReceiveMessage", function (user, message) {
    var msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    var encodedMsg = user   " says "   msg;
    var li = document.createElement("li");
    li.textContent = encodedMsg;
    document.getElementById("messagesList").appendChild(li);
});

//给"Send Message"按钮增加点击事宜
document.getElementById("sendButton").addEventListener("click", function (event) {
    var user = document.getElementById("userInput").value;
    var message = document.getElementById("messageInput").value;

    //挪用效劳端的 SendMessage 要领
    connection.invoke("SendMessage", user, message).catch(function (err) {
        return console.error(err.toString());
    });
    event.preventDefault();
});

//给"进入聊天室"按钮增加点击事宜
document.getElementById("goChatRoom").addEventListener("click", function () {
    goChatRoom();//开启衔接
    document.getElementById("outChatRoom").style.display = "block";
    this.style.display = "none";
});

//给"退出聊天室"按钮增加点击事宜
document.getElementById("outChatRoom").addEventListener("click", function () {
    outChatRoom();//封闭衔接
    this.style.display = "none";
    document.getElementById("goChatRoom").style.display = "block";
});

//开启衔接
function goChatRoom() {
    connection.start().catch(function (err) {
        return console.error(err.toString());
    });
}

//封闭衔接
function outChatRoom() {
    connection.stop();
}

 

第二步:界说强范例中央

    public interface IChatClient
    {
        //就算是这类强范例体式格局,客户端界说的要领名也必需和这个要领名一样,包孕署名.
        Task ReceiveMessage(string user, string message);
    }

    public class StronglyTypedChatHub : Hub<IChatClient>
    {
        public async Task SendMessage(string user, string message)
        {
            //向一切衔接的客户端中,在 "room" 小组的客户端发送音讯
            await Clients.Group("room").ReceiveMessage(user, message);
        }

        public override async Task OnConnectedAsync()
        {
            //当客户端衔接上后,将其归属到 "room" 小组.
            await Groups.AddToGroupAsync(Context.ConnectionId, "room");
            await base.OnConnectedAsync();
        }

        public override async Task OnDisconnectedAsync(Exception exception)
        {
            //当客户端断开衔接后,将其从 "room" 小组移除,一定要移除!否则会发送多条音讯!!!!
            await Groups.RemoveFromGroupAsync(Context.ConnectionId, "room");
            await base.OnDisconnectedAsync(exception);
        }
    }

 

第三步:注册 SignalR 效劳,增加路由

        public void ConfigureServices(IServiceCollection services)
        {
            ......
            services.AddSignalR();
            ......
        }

 

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            ......
           app.UseSignalR(routes => { routes.MapHub<StronglyTypedChatHub>("/chatHub"); });

            app.UseMvc();
        }

 

第四步:下载 singalr.js (略,可参照官方文档)

 

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。-

结果:

在没有进入聊天室的时刻,点击 "Send Message" 是没有结果的:

 

1 进入聊天室:

 

2 也进入聊天室

 

实在我觉得用这个 Group 的观点,能够完成多个聊天室功用.

 

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。