简单聊天室

使用持久链接类我们就可以做一些即时通讯的应用了,我使用Group做了一个简单的聊天室,先上图技术细节下面再讲

可以加入聊天室、创建聊天室、发送消息,下面就说说我是如何通过Group做出来的

持久链接类有一个Groups的对象,通过这个对象,我们可以进行分组添加人员、发送消息、删除人员等操作

在连接事件中,给当前游客指定随机名称,并且返回当前已有的聊天室信息

  1. protected override Task OnConnected(IRequest request, string connectionId)
  2. {
  3. var outPut = new OutPut
  4. {
  5. ResultType = "RoomList",
  6. Data = RoomList,
  7. UserName = $"游客{Rdom.Next(1, 999)}"
  8. };
  9. //返回房间信息
  10. return Connection.Send(connectionId, JsonConvert.SerializeObject(outPut));
  11. }

下面的代码做了剩下所有的处理,先从创建聊天室开始讲起,如果客户端的请求Action是createRoom那么当前操作就是创建聊天室,聊天室id是一个随机生成的Guid,并且把当前的游客添加到当前聊天室中

加入聊天室也是非常简单的,使用 Groups.Add方法可以轻松的做到,然后再进行广播给当前聊天室中的所有人推送有新的游客加入

发送消息则是最简单的了,可以看到最后的发送消息最后一个参数 connectionid,因为是当前人去发送消息 所以把当前人排除掉,给聊天室里的其他所有人发送

  1. protected override Task OnReceived(IRequest request, string connectionId, string data)
  2. {
  3. var dto = JsonConvert.DeserializeObject<GroupDto>(data);
  4.  
  5. var outPut = new OutPut
  6. {
  7. ResultType = "msgResult",
  8. Data = $"{dto.UserName} : {dto.Data}",
  9. CurrentRoomId = dto.RoomId
  10. };
  11.  
  12. if (dto.Action.Equals("jionUs"))
  13. {
  14. //加入聊天室
  15. Groups.Add(connectionId, dto.RoomId);
  16. outPut.Data = $"欢迎{dto.UserName}加入{dto.RoomName}聊天室";
  17. outPut.CurrentRoomId = dto.RoomId;
  18. Connection.Send(connectionId, JsonConvert.SerializeObject(outPut));
  19. return Groups.Send(dto.RoomId, JsonConvert.SerializeObject(outPut));
  20. }
  21.  
  22. if (dto.Action.Equals("createRoom"))
  23. {
  24. //创建聊天室
  25. var room = new Group() { RoomId = Guid.NewGuid().ToString(), RoomName = dto.RoomName };
  26. Groups.Add(connectionId, room.RoomId);
  27. dto.RoomId = room.RoomId;
  28. RoomList.Add(room);
  29. //返回聊天室列表
  30. outPut.ResultType = "RoomList";
  31. outPut.Data = RoomList;
  32. outPut.CurrentRoomId = dto.RoomId;
  33.  
  34. //发送消息
  35. return Connection.Send(connectionId, JsonConvert.SerializeObject(outPut));
  36.  
  37. }
  38. //发送消息
  39. return Groups.Send(dto.RoomId, JsonConvert.SerializeObject(outPut), connectionId);
  40. }

Asp.Net SignalR - 简单聊天室实现的更多相关文章

  1. ASP.NET SingalR + MongoDB 实现简单聊天室(一):搭建基本框架

    ASP.NET SingalR不多介绍.让我介绍不如看官网,我这里就是直接上源代码,当然代码还是写的比较简单的,考虑的也少,希望各位技友多多提意见. 先简单介绍聊天室功能: 用户加入聊天室,自动给用户 ...

  2. [Asp.net 开发系列之SignalR篇]专题三:使用SignalR实现聊天室的功能

    一.引言 在前一篇文章中,我向大家介绍了如何实现实现端对端聊天的功能的,在这一篇文章中将像大家如何使用SignalR实现群聊这样的功能. 二.实现思路 要想实现群聊的功能,首先我们需要创建一个房间,然 ...

  3. 史上最全面的SignalR系列教程-6、SignalR 实现聊天室

    1.概述 通过前面几篇文章对SignalR的详细介绍.我们知道Asp.net SignalR是微软为实现实时通信的一个类库.一般情况下,SignalR会使用JavaScript的长轮询(long po ...

  4. C#实例之简单聊天室(状态管理)

    前言        状态管理是在同一页或不同页的多个请求发生时,维护状态和页信息的过程.因为Web应用程序的通信协议使用了无状态的HTTP协议,所以当客户端请求页面时,ASP.NET服务器端都会重新生 ...

  5. 基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍。最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室。

    基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍.最后我们将会实现一个基于S ...

  6. Python Socket 简单聊天室2

    上篇文章写了一个简单的单线程的一问一答的简单聊天室.这次我们使用SocketServer模块搭建一个多线程异步的聊天室. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  7. SpringBoot 搭建简单聊天室

    SpringBoot 搭建简单聊天室(queue 点对点) 1.引用 SpringBoot 搭建 WebSocket 链接 https://www.cnblogs.com/yi1036943655/p ...

  8. 利用socket.io+nodejs打造简单聊天室

    代码地址如下:http://www.demodashi.com/demo/11579.html 界面展示: 首先展示demo的结果界面,只是简单消息的发送和接收,包括发送文字和发送图片. ws说明: ...

  9. java web利用mvc结构实现简单聊天室功能

    简单聊天室采用各种内部对象不适用数据库实现. 一个聊天室要实现的基本功能是:         1.用户登录进入聊天室, 2.用户发言 3.用户可以看见别人发言 刚才算是简单的需求分析了,现在就应该是进 ...

随机推荐

  1. 【C语言编程练习】5.9 爱因斯坦的阶梯问题

    1. 题目要求 有一个长阶梯,每2步上,最后剩1个台阶,若每3步上,最后剩2个台阶.若每5步上,最后剩4个台阶,若每6步上,最后剩5个台阶.只有每步上7阶,才可以刚好走完,请问台阶至少有多少阶? 2. ...

  2. jquery 操作服务端控件,select 控件

    <asp:DropDownList ID="ddl" runat="server"></asp:DropDownList> <se ...

  3. js的算法题

    1.统计一个字符串中出现最多的字母 给出一个字符串,统计出现次数最多的字母.如:“wqeqwhixswiqhdxsq”,其中出现最多的是q. js算法的实现 function findMax(str) ...

  4. 一文教你看懂大数据的技术生态圈:Hadoop,hive,spark

    转自:https://www.cnblogs.com/reed/p/7730360.html 大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞 ...

  5. vue font-icon 图标

    1.vue 游览器左上角小图标 把.ico文件放在根目录下的static文件夹下,然后link标签引入 <link rel="shortcut icon" href=&quo ...

  6. GYM 101617 F

    说到这题还要提到周日下午训练赛,都进去了hmc说他这场单切过准备换一场. 很不幸的是我当时已经开了这个几何题, 开场就开几何是什么鬼啊!!! 给你n个圆,找一点在所有园内并且离原点最远.(保证有解) ...

  7. Java课程之团队开发(NABCD需求分析)

    N.需求 1.学生基本的录入课程功能 2.学生对于空教室使用的需求(自习或者是活动占用) 3.学生对于具体课程的查询需求 A.做法 1.制作出基于安卓的课程查询,录入以及教室查询应用软件 B.好处 1 ...

  8. 34 文件地理数据库(GDB)变文件夹了怎么办

    我们都知道文件地理数据库(GDB)是ArcGIS软件特有的格式,有其独特的设计之处,在文件资源管理器中显示为.gdb的文件夹,但是里面的文件却看不明白,而且将gdb文件夹在Windows资源管理器中直 ...

  9. 适配iOS11

    总结在iOS11系统中出现的适配问题: 启动app发现上下有空隙,不能完全贴合屏幕----- 解决方案:添加一张尺寸为1125x2436的启动图. 隐藏导航栏的界面,会出现无法贴合屏幕顶部(一般来说, ...

  10. SSIS - 3.变量

    跟其他变成语言一样,SSIS包中的变量是用来存储临时值的,变量使得整个SSIS包使用起来更加灵活.比如,我们可以遍历一个文件夹来获取文件夹下的所有文件的名称并把名称存储到一个变量中以便进一步处理.在S ...