ASP.NET Core 2.2 基础知识(十七) SignalR 一个极其简陋的聊天室
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ASP.NET Core 2.2 基础知识(十七) SignalR 一个极其简陋的聊天室,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2844字,纯文字阅读大概需要5分钟。
内容图文
原文: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, "&").replace(/</g, "<").replace(/>/g, ">"); 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(); }
第二步:定义强类型中心
publicinterface IChatClient { //就算是这种强类型方式,客户端定义的方法名也必须和这个方法名一样,包括签名. Task ReceiveMessage(string user, string message); } publicclass StronglyTypedChatHub : Hub<IChatClient> { publicasync Task SendMessage(string user, string message) { //向所有连接的客户端中,在 "room" 小组的客户端发送消息await Clients.Group("room").ReceiveMessage(user, message); } publicoverrideasync Task OnConnectedAsync() { //当客户端连接上后,将其归属到 "room" 小组.await Groups.AddToGroupAsync(Context.ConnectionId, "room"); awaitbase.OnConnectedAsync(); } publicoverrideasync Task OnDisconnectedAsync(Exception exception) { //当客户端断开连接后,将其从 "room" 小组移除,一定要移除!不然会发送多条消息!!!!await Groups.RemoveFromGroupAsync(Context.ConnectionId, "room"); awaitbase.OnDisconnectedAsync(exception); } }
第三步:注册 SignalR 服务,添加路由
publicvoid ConfigureServices(IServiceCollection services) { ...... services.AddSignalR(); ...... }
publicvoid Configure(IApplicationBuilder app, IHostingEnvironment env) { ...... app.UseSignalR(routes => { routes.MapHub<StronglyTypedChatHub>("/chatHub"); }); app.UseMvc(); }
第四步:下载 singalr.js (略,可参照官方文档)
效果:
在没有进入聊天室的时候,点击 "Send Message" 是没有效果的:
1 进入聊天室:
2 也进入聊天室
其实我觉得用这个 Group 的概念,可以实现多个聊天室功能.
原文:https://www.cnblogs.com/lonelyxmas/p/10249224.html
内容总结
以上是互联网集市为您收集整理的ASP.NET Core 2.2 基础知识(十七) SignalR 一个极其简陋的聊天室全部内容,希望文章能够帮你解决ASP.NET Core 2.2 基础知识(十七) SignalR 一个极其简陋的聊天室所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。