Asp.Net Mvc5 结合 SignalR2.0+ 实现消息交互简单例子
Nuget添加 SignalR包
1、构建一个MyHubServer服务端类
定义类的特性标签为
[HubName("chatHub")]
public class MyHubServer : Hub
{
}
必须继承Hub基类,基类中提供了如下操作
public abstract class HubBase : IHub, IUntrackedDisposable, IDisposable
{
protected HubBase(); public HubCallerContext Context { get; set; }
public IGroupManager Groups { get; set; } public void Dispose();
public virtual Task OnConnected();
public virtual Task OnDisconnected(bool stopCalled);
public virtual Task OnReconnected();
protected virtual void Dispose(bool disposing);
}
Context :上下问对象
Groups : 分组
以及下面的三个虚方法,必要是可以重写
OnConnected 建立连接、OnDisconnected 断开连接、OnReconnected 从新连接构建客Js户端 ,安装了Nuget包后会看到如下js文件,将应用页面添加js引用,基于Jquery的
引用客户端JS包

<script src="~/Scripts/jquery.signalR-2.2.3.min.js"></script>
<script src="~/signalr/hubs"></script>
Notes:第二个Js是Signalr生成的js文件路径,项目目录中不会存在
<script>
$(function () {
//服务器端对应的集线器
var hub = $.connection.chatHub;
////客户端接收消息 上线通知
hub.client.addTips = function (msg) {
$('#discussion').html('<span><strong></strong> ' + htmlEncode(msg) + '</span>');
};
//启动连接成功
$.connection.hub.start().done(function () {
$('#sendmessage').click(function () {
hub.server.sendmsg($('#contact').val(), $('#sendid').val(), $('#sendname').val());
$('#contact').val('').focus();
});
});
});
function htmlEncode(value) {
var encodedValue = $('<div />').text(value).html();
return encodedValue;
}
</script>
需要注意的是这个

这里连接的chartHub就是服务端的 HubName属性标签配置的名称

以如下客户排单为例子:

当没有客户对接人员上线发送会提示

我们打开2个浏览器分别登上不同的账号
当客户对接人员使用功能时候提示

使用另一个账号发送消息,客户对接人员会实时接受消息,同时将这些消息保留数据库记录


接下来看下服务端的具体代码
public void sendmsg(string contact, string sendid, string sendname)
{
Clients.Client(Context.ConnectionId).addTips("客户接待人员还没有上线");
}
服务端发送方法,这里与客户端Js调用服务端方法是对应的

服务端 中的 Clients对象包含了3个类别
All:向所有的客户端发送消息
Group:向分组包含的客户端发送消息
Client:向某一个指定客户端发送消息
基本就是对这些进行操作,包括群聊的处理都是通过以上三个方式来实现在线聊天功能
Asp.Net Mvc5 结合 SignalR2.0+ 实现消息交互简单例子的更多相关文章
- activemq消息生产者与消息消费者简单例子
消息生产者HelloQueueProducer.java package activemq.test; import javax.jms.Connection;import javax.jms.Con ...
- 关于Solr6.0中solrj使用简单例子
solr6.0的solrJ接口有部分变化,下面列出了简单的使用实例,有需要的朋友可以参考下. package com.ailk.solr6; import java.io.IOException; i ...
- Django2.0 正则表示匹配的简单例子
在Django中,使用正则表达式,匹配Url 默认情况下,url固定格式如下: urlpatterns = [ path('admin/', admin.site.urls), ] 如果需要使用正则表 ...
- 彻底解决asp.net mvc5.2.2:vs2013 cshtml视图文件报错(当前上下文中不存在名称“model”,ViewBag,Url)
最近遇到一个奇葩的问题,在vs2013下cshtml视图文件报错,出现当前上下文中不存在名称“model”,ViewBag,Url等等),在视图中也没有智能提示了,用@model声明视图的model类 ...
- Asp.Net MVC5入门学习系列④
原文:Asp.Net MVC5入门学习系列④ 添加Model且简单的使用EF 对于EF(EntityFramework)不了解的朋友可以去百度文科或者在园子里搜一些简资源看下,假如和我一样知道EF的概 ...
- ASP.NET MVC5基础-控制器(Controller)详解
在上文ASP.NET MVC5基础 – MVC文件架构中我们简单了解了下控制器Controller的作用,本文我将详细介绍控制器Controller的使用方法. Controller的运行过程 上文我 ...
- MVC5中使用SignalR2.0实现实时聊天室
原文 MVC5中使用SignalR2.0实现实时聊天室 有时候需要浏览器和服务端保持实时的通讯(比如在线聊天),SignalR的出现让这一切变得非常简单.它能够让服务端向客户端实时的推送消息.如果用户 ...
- SignalR2.0开发实例之——群发消息
一.前言 ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么是实时通信的Web呢?就是让客户端(Web页面)和服务器端可以互相 ...
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(五) 之 加好友,加群流程,消息管理和即时消息提示的实现
前言 前前一篇留了个小问题,在上一篇中忘了写了,就是关于LayIM已经封装好的上传文件或者图片的问题.对接好接口之后,如果上传速度慢,界面就会出现假死情况,虽然文件正在上传.于是我就简单做了个图标替代 ...
随机推荐
- 修改MyEclipse取消默认工作空间
使用MyEclipse,在最开始Workspace Launcher中选择工作空间时,勾选了默认选择,以后启动程序的时候,就不会弹出这个选择工作空间的对话框了.如下图: 但后来又新增一个工作空间,需要 ...
- IDEA导出jar包后运行报错 找不到或无法加载主类
开发工具:IDEA16 运行环境:ubuntu 问题:根据网上的Idea导出jar包的方法,将我的项目导出jar包后运行报错:找不到或无法加载主类. 为了找到这个原因,我重新搭建了一个测试例子,在 ...
- 【题解】 [HNOI2015]菜肴制作 (拓扑排序)
题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1. 由于菜肴 ...
- 【BZOJ1452】[JSOI2009]Count(树状数组)
[BZOJ1452][JSOI2009]Count(树状数组) 题面 BZOJ 洛谷 题解 数据范围这么小?不是对于每个颜色开一个什么东西记一下就好了吗. 然而我不会二维树状数组? 不存在的,凭借多年 ...
- 【uoj3】 NOI2014—魔法森林
http://uoj.ac/problem/3 (题目链接) 题意 给出一张带权图,每条边有两个权值A和B,一条路径的花费为路径中的最大的A和最大的B之和.求从1走到n的最小花费. Solution ...
- Atcoder Grand 006 C-Rabbit Exercise
题意: 数轴上有n只兔子,第i只兔子的坐标为xi. 有一组操作,这组操作的第i个操作是要让第ai只兔子等概率的跳到自己关于第ai+1或第ai-1只兔子的对称点. 进行K组操作,求每只兔子最后坐标的期望 ...
- Qt ------ WAV 音频文件播放
1.用 QFile 打开 WAV 文件,读出文件头信息,看看是否符合音频播放设备的要求 QAudioDeviceInfo m_audioOutputDevice;//可以获取音频输出设备的信息,比如哪 ...
- HTML5 文件API
filelist 表示文件对象的列表. <form name="upload"> <input type="file" name=" ...
- Hadoop生态圈-Azkaban实现hive脚本执行
Hadoop生态圈-Azkaban实现hive脚本执行 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客中在HDFS分布式系统取的数据,而这个数据的是有之前我通过MapRed ...
- POJ 2965 The Pilots Brothers' refrigerator (暴力枚举)
https://vjudge.net/problem/POJ-2965 与poj-1753相似,只不过这个要记录路径.poj-1753:https://www.cnblogs.com/fht-lito ...