MVC的SignalR例子
# SignalR学习
ASP.NET SignalR 是为.NET 开发者提供即时通讯Web 应用的类库。即时通讯Web服务就是服务器将内容自动推送到已经连接的客户端,而不是服务器等待客户端发起一个新的数据请求。SignalR简化了构建实时应用的过程,它包括了一个Asp .Net服务器端库和一个Js端库,集成了数种常见的消息传输方式,如long polling,WebSocket,并提供相应的Api供开发人员选择如何调用,帮助其可以简单快速地实现客户端与服务器端相互间的实时通信。
当环境条件合适时,SignalR将WebSocket作为底层传输方式的优先实现,当然,它也能很高效地回退到其他技术。同时,SignalR提供了非常良好的Api以供远程调用(RPC) 浏览器中的js代码。
### SignalR的优点
1. SignalR 不仅能够自动管理连接,而且能够同时向所有的客户端广播消息,就像聊天室一样。你也能够发送消息到指定的客户端。SignalR提供的连接是持久的,它不像传统的HTTP连接需要为每次收发消息建立单独的连接。
2. SignalR 同时在服务端提供了远程过程调用协议(RPC),让你能够“主动”推送消息到浏览器中的客户端,而不像普通的Web服务一样的应答方式。
3. SignalR 应用能够运用到成千的客户端上,通过使用服务总线、SQL Server或者Redis。
4. SignalR 是开源的,能够通过GitHub很容易得到。
### 应用场景
1. 即时响应应用,例如:在线聊天,游戏,天气或者股票信息
2. 用户需要随时更新数据的网页运用,例如:仪表盘和监控运用,其他协同应用程序(文档协同操作)、工作流更新或者是即时表格
3. 高频繁从服务器更新的应用,例如:实时在线游戏
### 官方网址
1. https://docs.microsoft.com/en-us/aspnet/signalr/
2. https://github.com/SignalR/SignalR
### 运行效果图

### 核心代码
后台代码
using Microsoft.AspNet.SignalR;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Web; namespace MvcSignalR.Services
{
/// <summary>
/// 数据交流类
/// </summary>
public class ChatServiceHub : Hub
{
//所有的ConnectionId
public static ConcurrentDictionary<string,DateTime> AllConnectionIDs = new ConcurrentDictionary<string, DateTime>();
//用户的ConnectionID,一个ID对应一个用户
public static ConcurrentDictionary<string, string> UserConnectionIDs = new ConcurrentDictionary<string, string>(); private Random rd = new Random(); public void Send(string message)
{
int i = ;
while (i < )
{
i++;
Thread.Sleep();
Clients.Client(Context.ConnectionId).broadcastMessage(Context.ConnectionId, message + rd.Next());
}
} public void SendMessage(string message)
{
Clients.Client(Context.ConnectionId).receiveMessage(message + rd.Next());
} public override Task OnConnected()
{
AllConnectionIDs.AddOrUpdate(Context.ConnectionId, DateTime.Now, (key, oldValue) => DateTime.Now);
return base.OnReconnected();
}
}
}
前台代码
@{
ViewBag.Title = "QQ";
}
<link href="~/Content/qq.css" rel="stylesheet" />
<h2></h2>
<div class="qqBox">
<div class="BoxHead">
<div class="headImg">
<img src="~/Images/qq/1004.jpg" />
</div>
<div class="internetName">signalR模拟QQ</div>
</div>
<div class="context">
<div class="conLeft">
<ul>
<li>
<div class="liLeft"><img src="~/Images/qq/1002.jpg" /></div>
<div class="liRight">
<span class="intername">SignalR群</span>
<span class="infor">厉害了</span>
</div>
</li>
<li class="bg">
<div class="liLeft"><img src="~/Images/qq/1001.jpg" /></div>
<div class="liRight">
<span class="intername">小华</span>
<span class="infor">[流泪]</span>
</div>
</li>
<li>
<div class="liLeft"><img src="~/Images/qq/1002.jpg" /></div>
<div class="liRight">
<span class="intername">SignalR交流群</span>
<span class="infor">666</span>
</div>
</li>
</ul>
</div>
<div class="conRight">
<div class="Righthead">
<div class="headName">小华</div>
<div class="headConfig">
<ul>
<li><img src="~/Images/qq/20170926103645_06.jpg" /></li>
<li><img src="~/Images/qq/20170926103645_08.jpg" /></li>
<li><img src="~/Images/qq/20170926103645_10.jpg" /></li>
<li><img src="~/Images/qq/20170926103645_12.jpg" /></li>
</ul>
</div>
</div>
<div class="RightCont">
<ul class="newsList"></ul>
</div>
<div class="RightFoot">
<div class="footTop">
<ul>
<li><img src="~/Images/qq/20170926103645_31.jpg" /></li>
<li class="ExP"><img src="~/Images/qq/20170926103645_33.jpg" /></li>
<li><img src="~/Images/qq/20170926103645_35.jpg" /></li>
<li><img src="~/Images/qq/20170926103645_37.jpg" /></li>
<li><img src="~/Images/qq/20170926103645_39.jpg" /></li>
<li><img src="~/Images/qq/20170926103645_41.jpg" alt="" /></li>
<li><img src="~/Images/qq/20170926103645_43.jpg" /></li>
<li><img src="~/Images/qq/20170926103645_45.jpg" /></li>
</ul>
</div>
<div class="inputBox">
<textarea id="dope" style="width: 99%;height: 75px; border: none;outline: none;" name=""></textarea>
<button class="sendBtn">发送(s)</button>
</div>
</div>
</div>
</div>
</div>
@section scripts{
<script src="~/Scripts/jquery.signalR-2.3.0.js"></script>
<script src="~/signalr/hubs"></script>
<script src="~/Scripts/qq.js"></script>
}
js代码
$(function () {
// Declare a proxy to reference the hub.
var chat = $.connection.chatServiceHub;
// 接受信息
chat.client.receiveMessage = function (message) {
receiveMessage(message);
};
$.connection.hub.start();
// 左边列表
$('.conLeft li').on('click', function () {
$(this).addClass('bg').siblings().removeClass('bg');
var intername = $(this).children('.liRight').children('.intername').text();
$('.headName').text(intername);
$('.newsList').html('');
});
//发送信息
$('.sendBtn').on('click', function () {
var news = $('#dope').val();
if (news == '') {
alert('不能为空');
} else {
chat.server.sendMessage(news);
sendMessage(news);
$('#dope').val('');
}
});
function sendMessage(message) {
var str = '';
str += '<li>' +
'<div class="nesHead"><img src="/Images/qq/1004.jpg"/></div>' +
'<div class="news"><img class="jiao" src="/Images/qq/20170926103645_03_02.jpg">' + message + '</div>' +
'</li>';
$('.newsList').append(str);
$('.conLeft').find('li.bg').children('.liRight').children('.infor').text(message);
$('.RightCont').scrollTop($('.RightCont')[0].scrollHeight);
}
function receiveMessage(message) {
var answer = '';
answer += '<li>' +
'<div class="answerHead"><img src="/Images/qq/1003.jpg"/></div>' +
'<div class="answers"><img class="jiao" src="/Images/qq/jiao.jpg">' + message + '</div>' +
'</li>';
$('.newsList').append(answer);
$('.RightCont').scrollTop($('.RightCont')[0].scrollHeight);
}
});
### git地址(Demo)
https://github.com/jasonhua95/MvcSignalR.git
MVC的SignalR例子的更多相关文章
- mvc中signalr实现一对一的聊天
Asp.net MVC中实现即时通讯聊天的功能.前几天刚写了一片基础入门的教程,今天就来实现一下使用signaIr实现一对一的聊天的功能,对于这种场景也是即时通讯最基本功能.好吧废话不多说.先来看一下 ...
- Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介
Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...
- Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)
简单介绍 关于SignalR的简单实用 请参考 Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室) 在上一篇中,我们只是介绍了简单的消息推送,今天我们来修改一下,实现 ...
- signalR例子
不用找了,比较全的signalR例子已经为你准备好了. 这几天想着将一个winform的工具上线到web上,因为对时时性的要求比较高,找朋友咨询了一下推荐了SignlarR 框架,比较强大.昨天才 ...
- C# ASP.NET MVC 之 SignalR 学习 实时数据推送显示 配合 Echarts 推送实时图表
本文主要是我在刚开始学习 SignalR 的技术总结,网上找的学习方法和例子大多只是翻译了官方给的一个例子,并没有给出其他一些经典情况的示例,所以才有了本文总结,我在实现推送简单的数据后,就想到了如何 ...
- Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室)
简介 ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么是实时通信的Web呢?就是让客户端(Web页面)和服务器端 ...
- 不用找了,比较全的signalR例子已经为你准备好了.
这几天想着将一个winform的工具上线到web上,因为对时时性的要求比较高,找朋友咨询了一下推荐了SignlarR 框架,比较强大.昨天才看到,今天研究了一下将里面的例子都拿出来共享. 最全的参考: ...
- Asp.NET websocket,Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室)
ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么是实时通信的Web呢?就是让客户端(Web页面)和服务器端可以互相通知消息及 ...
- 不用找了,比较全的signalR例子已经为你准备好了(2)---JqGrid 服务端刷新方式-注释详细-DEMO源码下载
上次用客户端进行数据刷新的方式,和官方的Demo实现存在差异性,今天花了一点时间好好研究了一下后台时时刷新的方式.将写的代码重新update了一次,在这之前找过好多的资料,发现都没有找到好的例子,自己 ...
随机推荐
- zombodb query dsl
zombodb query dsl 是为了简化es 查询的处理,同时可以兼容基本上所有的es 操作 一个简单的查询,查询任何字段包含cats 以及dogs 的 SELECT * FROM table ...
- Centos7.4安装配置haproxy和Keepalived
系统版本是centos7.4的 [root@data-1-1 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [roo ...
- JDK8安装与配置
如果是免安装包 配置方法 1.配置java环境变量 注意:jdk文件夹名字取名不要用汉语取名. 1)鼠标右键点击我的电脑(计算机)选择属性栏 2)再点击左边高级系统设置 3)点击环境变量 4)在系统变 ...
- 第一章 HTML+CSS(中)
4.域元素(form表单.textarea文本域.fieldset域集合.input使用) 案例 表单 用户名: 密码: 昵称: 你喜欢的水果有? 苹果 黄瓜 香蕉 请选择性别 男 女 请选择你要的网 ...
- 如何在同一主机中添加多个homestead并行开发
参考源 https://blog.csdn.net/smm188/article/details/79356150 1,在项目目录 git clone homestead 后(见上面流程中的第四步), ...
- 使用nrm工具高效地管理npm源
在使用npm时,官方的源下载npm包会比较慢,国内我们基本使用淘宝的源,如果公司内部搭建了一套npm私有仓库,公司内部的源不可能把npm官方的npm包都同步,所以需要切换npm源.如果使用npm/cn ...
- Java String对象的问题 String s="a"+"b"+"c"+"d"
1, String s="a"+"b"+"c"+"d"创建了几个对象(假设之前串池是空的) 2,StringBuilde ...
- auth系统与类视图
用户 权限 密码哈希系统 表单视图工具 密码强度检查 第三方或自定义 限制登录尝试 第三方验证 (qq,微信,微博登录) 对象级权限 auth user用户表 group分组表 ...
- 网络之OSI七层协议模型、TCP/IP四层模型
13.OSI七层模型各层分别有哪些协议及它们的功能 在互联网中实际使用的是TCP/IP参考模型.实际存在的协议主要包括在:物理层.数据链路层.网络层.传输层和应用层.各协议也分别对应这5个层次而已. ...
- MongoDB复制集技术
复制集搭建 没毛病: https://www.cnblogs.com/nicolegxt/p/6841442.html?utm_source=itdadao&utm_medium=referr ...