在上一章介绍了 一对一推送的方式,这章重点介绍下群组推送和多人推送

群组主要就是用到了方法:Groups.Add(Context.ConnectionId, groupName); 将不同的连接id加入到同一个组名当中

下面先演示一个群聊的功能:

服务端代码:

     /// <summary>
/// 发送给指定组
/// </summary>
public void CallGroup(string fromname, string content)
{
string groupname = Context.QueryString["groupname"]; //获取客户端发送过来的用户名
//根据username获取对应的ConnectionId
Clients.Group(groupname).show(fromname+":"+content);
}
//群组聊天
public override Task OnConnected()
{
string groupname = Context.QueryString["groupname"]; //获取客户端发送过来的用户名
JoinGroup(groupname);//加入群组
return base.OnConnected();
}
public override Task OnDisconnected(bool stopCalled)
{
string groupname = Context.QueryString["groupname"]; //获取客户端发送过来的用户名
LeaveGroup(groupname);//移除组
return base.OnDisconnected(true);
}
public Task JoinGroup(string groupName)
{
return Groups.Add(Context.ConnectionId, groupName);
} public Task LeaveGroup(string groupName)
{
return Groups.Remove(Context.ConnectionId, groupName);
}

前端,我们创建两个目录,武侠和喜剧,每个目录下分别有1.html和2.html 表示2个人聊天。

下面上前端的代码:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<link href="/Content/bootstrap.min.css" rel="stylesheet" />
<script src="/Scripts/jquery-1.10.2.min.js"></script>
<script src="/Scripts/jquery.signalR-2.3.0.min.js"></script>
<script src="/signalr/hub/hubs"></script>
<meta charset="utf-8" />
<style type="text/css">
body {
margin: 20px;
} .input {
padding-left: 5px;
}
</style>
</head>
<body>
<div>
<h4>武侠群--杨过</h4>
<p>
<input type="text" id="content" placeholder="" class="input" /> &nbsp;&nbsp;<input type="button" value="发送" class="btn btn-sm btn-info" id="btn_send" />
</p> <div>
<h4>接收到的信息:</h4>
<ul id="dataContainer"></ul>
</div>
</div> <script language="javascript">
$(function() {
var chat = $.connection.demoHub; //连接服务端集线器,demoHub为服务端集线器名称,js上首字母须改为小写(系统默认)
//定义客户端方法,此客户端方法必须与服务端集线器中的方法名称、参数均一致。
//实际上是服务端调用了前端的js方法(订阅)
$.connection.hub.qs = { 'groupname': '武侠' }
chat.client.show=function(content) {
var html = '<li>' + htmlEncode(content) + "</li>";
$("#dataContainer").append(html);
} //定义推送
$.connection.hub.start()
.done(function() {
$("#btn_send").click(function() {
chat.server.callGroup("杨过", $("#content").val()); //将客户端的content内容发送到服务端
$("#content").val("");
});
});
});
//编码
function htmlEncode(value) {
var encodedValue = $('<div />').text(value).html();
return encodedValue;
}
</script>
</body>
</html>

其他前端这边就不贴,就是把groupname参数改一下,还有callGroup里面的第一个参数改一下即可。

下面上效果图:

从上面结果,我们可以看到,已经实现了两个群组分别独立聊天,内容互不影响。

这里主要就是用到了Group这个对象,当然群组的名称本例是通过前端传递的,在实际项目中也可以用其他各种方式来实现。

本章结束

ASP.NET SignalR 系列(五)之群组推送的更多相关文章

  1. Asp.net SignalR 实现服务端消息实时推送到所有Web端

    ASP .NET SignalR是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.实际上 Asp.net SignalR 2 实现 服务端消息推送到Web端, 更加 ...

  2. 《ASP.NET SignalR系列》第五课 在MVC中使用SignalR

    接着上一篇:<ASP.NET SignalR系列>第四课 SignalR自托管(不用IIS) 一.概述 本教程主要阐释了如何在MVC下使用ASP.NET SignalR. 添加Signal ...

  3. 《ASP.NET SignalR系列》第三课 SignalR的支持平台

    从现在开始相关文章请到: http://lko2o.com/moon 接着第二课:<ASP.NET SignalR系列>第二课 SignalR的使用说明 一.服务器系统要求 SignalR ...

  4. 《ASP.NET SignalR系列》第二课 SignalR的使用说明

    从现在开始相关文章请到: http://lko2o.com/moon 接续上一篇:<ASP.NET SignalR系列>第一课 认识SignalR (还没有看的话,建议您先看看) 一.指定 ...

  5. 《ASP.NET SignalR系列》第一课 认识SignalR

    从现在开始相关文章请到: http://lko2o.com/moon 一.概述 ASP.NET signalr对ASP.NET开发者来说是一个新的程序库,它能让我们更加容易便捷地开发实时通信功能; s ...

  6. 《ASP.NET SignalR系列》第四课 SignalR自托管(不用IIS)

    从现在开始相关文章请到: http://lko2o.com/moon 接着上一篇:<ASP.NET SignalR系列>第三课 SignalR的支持平台 一.概述 SignalR常常依托于 ...

  7. C#微信公众号开发系列教程五(接收事件推送与消息排重)

    微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...

  8. nodejs通过钉钉群机器人推送消息

    nodejs 通过钉钉群机器人推送消息 Intro 最近在用 nodejs 写爬虫,之前的 nodejs 爬虫代码用 js 写的,感觉可维护性太差,也没有智能提示,于是把js改用ts(typescri ...

  9. Asp.net SignalR 应用并实现群聊功能 开源代码

    ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指这样一种功能:当所连接的客户端变得可用时服务 ...

随机推荐

  1. 为什么不要使用==比较Integer?

    比较Integer的时候,不要用==. 查看Integer的源码,如下: /** * Returns an {@code Integer} instance representing the spec ...

  2. 有关于服务端模板注入(ssti攻击)——BUUCTF - easy_tornado

    打开题目出现3个链接 /flag.txt 中提示flag in /fllllllllllllag /welcome.txt 中提示 render /hints.txt 中提示 md5(cookie_s ...

  3. Oracle 11g R2手动配置EM(转)

    转自:http://blog.itpub.net/9034054/viewspace-1973418/ Oracle 11g R2手动配置EM Oracle 作者:luashin 时间:2016-01 ...

  4. 如何在本地使用scala或python运行Spark程序

    如何在本地使用scala或python运行Spark程序   包含两个部分: 本地scala语言编写程序,并编译打包成jar,在本地运行. 本地使用python语言编写程序,直接调用spark的接口, ...

  5. 【GMT43智能液晶模块】例程十四:MODBUS TCP实验——电源监控

    . 源代码下载链接: 链接:https://pan.baidu.com/s/1S8wZBJBYGxuPaWEkJvMJlg 提取码:5bh3 复制这段内容后打开百度网盘手机App,操作更方便哦 GMT ...

  6. k8s记录-安装ansible

    ##1.安装1) python版本需要2.6以上,不过通过centos7都会默认安装上python2.7.5,查看方法:python -V2) 添加yum 源a.vim /etc/yum.repos. ...

  7. 如何画出高级感的曼哈顿图,Manhattan++工具介绍

    欢迎来到"bio生物信息"的世界 BMC Bioinformatics前几天发布了一个画曼哈顿图的工具Manhattan++, 这个名字很好理解,Manhattan的升级版. 这个 ...

  8. 浅谈PageRank

    浅谈PageRank 2017-04-25 18:00:09 guoziqing506 阅读数 17873更多https://blog.csdn.net/guoziqing506/article/de ...

  9. java-完全解耦-例子

    class filter{ public String name(){ return getClass().getSimpleName(); } public String process(Strin ...

  10. lua【卤鹅】总结

    转自:https://www.cnblogs.com/reblue520/p/10767428.html 编写一个简单的hello world程序 test.lua 如果觉得简单,可以给一个for循环 ...