简单聊天室

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

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

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

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

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

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

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

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

protected override Task OnReceived(IRequest request, string connectionId, string data)
{
var dto = JsonConvert.DeserializeObject<GroupDto>(data); var outPut = new OutPut
{
ResultType = "msgResult",
Data = $"{dto.UserName} : {dto.Data}",
CurrentRoomId = dto.RoomId
}; if (dto.Action.Equals("jionUs"))
{
//加入聊天室
Groups.Add(connectionId, dto.RoomId);
outPut.Data = $"欢迎{dto.UserName}加入{dto.RoomName}聊天室";
outPut.CurrentRoomId = dto.RoomId;
Connection.Send(connectionId, JsonConvert.SerializeObject(outPut));
return Groups.Send(dto.RoomId, JsonConvert.SerializeObject(outPut));
} if (dto.Action.Equals("createRoom"))
{
//创建聊天室
var room = new Group() { RoomId = Guid.NewGuid().ToString(), RoomName = dto.RoomName };
Groups.Add(connectionId, room.RoomId);
dto.RoomId = room.RoomId;
RoomList.Add(room);
//返回聊天室列表
outPut.ResultType = "RoomList";
outPut.Data = RoomList;
outPut.CurrentRoomId = dto.RoomId; //发送消息
return Connection.Send(connectionId, JsonConvert.SerializeObject(outPut)); }
//发送消息
return Groups.Send(dto.RoomId, JsonConvert.SerializeObject(outPut), connectionId);
}

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. ORM之SQLALchemy

    今天来聊一聊 Python 的 ORM 框架 SQLAlchemy SQLAlchemy 没有 Django 的 Models 好用!因为models是Django自带的ORM框架,也正是因为是Dja ...

  2. ESP-01S刷ESPEasy固件,接入HA

    首先下载ESPEasy最新版 https://github.com/letscontrolit/ESPEasy/releases 准备接线从ESP01S到USB-TTL TTL——ESP01S 3.3 ...

  3. 制作docker-jdk7-zookeeper镜像(非集群版)

    ## 准备工作 用到的工具, Xshell5, Xftp5, jdk-7u79-linux-x64.tar.gz, zookeeper-3.4.9.tar.gz, docker.io/centos:l ...

  4. Spring boot 处理 error 的套路

    Spring boot 处理 error 的基本流程: Controller -> 发生错误 -> BasicErrorController -> 根据 @RequestMappin ...

  5. 无法在Application Designer中打开PeopleTools对象

    PeopleSoft开发人员经常使用PeopleSoft Application Designer来查看/修改PeopleTools对象,例如字段,记录,页面,组件等.开发人员对Application ...

  6. git教程——安装配置

    Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个 ...

  7. Flask的上下文源码剖析

    先写一段Flask程序 from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return ...

  8. Python函数式编程之闭包

    -------------------------函数式编程之*******闭包------------------------ Note: 一:简介 函数式编程不是程序必须要的,但是对于简化程序有很 ...

  9. 配置NFS固定端口

    NFS启动时会随机启动多个端口并向RPC注册,为了设置安全组以及iptables规则,需要设置NFS固定端口.NFS服务需要开启 mountd,nfs,nlockmgr,portmapper,rquo ...

  10. java:找出占用CPU资源最多的那个线程

    linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找: 1.先用top命令找出占用资源厉害的java进程id,如: 2 ...