关于ASP.NET SignalR 解释百度百科是这样说的:

ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程。实时 Web 功能是指这样一种功能:当所连接的客户端变得可用时服务器代码可以立即向其推送内容,而不是让服务器等待客户端请求新的数据。

也可以参照微软官方信息:https://dotnet.microsoft.com/apps/aspnet/signalr

我的理解是,客户端以及服务器端进行的实时通讯操作,客户端注册在javascript函数中注册一系列方法,服务器端会主动调用客户端已注册的方法。

比如说:现有三台电脑:A、B、C。服务器调用客户端方法之前,A,B,C必须存在已被注册的方法,服务器才能进行一个调用的操作

或者这样去理解,服务器端在调用客服端的数据时,要对其进行一个处理,可以说是一个加工、转发的过程吧???在信息处理完毕后,服务器端又将处理好的数据发送给客户端进行一个渲染,这样就不再对web页面进行一个刷新,对用户体验度也是不错的,对比ajax异步操作。以前在进行实时通讯是,要通过ajax轮询操作,浏览器不断地发送Http请求给服务器,如果头部数据冗余,还可能会出现意想不到的后果,对用户的体验度也不太友好,所以推出了 WebSockets,它是HTML5提供的新的API。SignalR使用WebSockets,以在Web网页与服务器端间建立Socket连接。

当然你可以去基于ASP.NET MVC或者是WebApi去作SignalR。

创建SignalR项目

Startup类在运行项目时系统会找到这个文件,不然会报错

代码:

using Owin;
namespace SignalRDemo
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
//使用SignalR
app.MapSignalR();
}
}
}

MsgHub类中代码:

using Microsoft.AspNet.SignalR;

namespace SignalRDemo
{
public class MsgHub : Hub
{
//在hub中编写的方法,都是要被客户端调用的方法
public void SendMsg(string name,string txt)
{
//服务器主动调用客户端的方法
//Others:发送给其他人,All发送给所有人(包括自己)
Clients.All.getMsg(name,txt);
}
}
}
Clients:就是客户端的意思,ALL:所有用户,getMsg是客服端以定义的方法
在浏览器中输入以上地址去检验SignalR是否可以使用,如果存在即可是哟:

创建一个Html页面:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<!-- 这两个引入的js文件顺序要一致 -->
<script src="Scripts/jquery-3.4.1.js"></script>
<script src="Scripts/jquery.signalR-2.2.2.js"></script>
<!-- 这个文件是测试你的hub是否可用,如果存在,即可用,首先你是找不到这个文件的,这是系统生成的 -->
<script src="/signalr/hubs"></script>
<script>
$(function() {
$("#btnlogin").click(function() {
login();
});
});
function login() {
if ($("#txtName").val().length > 3) { sessionStorage.setItem("user",$("#txtName").val());
}
else {
alert('登录失败');
return;
}
serverClient();
} function serverClient() {
//1.注册服务器连接
var msgHub = $.connection.msgHub;
//2.服务端调用客户端方法前客户端先要注册方法 getMsg
msgHub.client.getMsg = function (name,txt) {
//服务器给客户端发个内容,客户端接收出来
var htmltTemplate = `
<div>
<span>{{name}}</span>
<span>{{content}}</span>
</div>
`
//替换发送的内容
var html = $(htmltTemplate.replace('{{name}}', name)
.replace('{{content}}', txt)); if (name === sessionStorage.getItem("user")) {
html.css({ "color": "red" });
}
//prepend 往前追加
$("#msgList").prepend(html);
} //3.启动连接并绑定处理事件
// done 连接成功
// fail 连接失败
$.connection.hub.start()
.done(function () {
$("#sendBtn").removeAttr("disabled").click(function () {
//客户端发送 sendMsg小写
msgHub.server.sendMsg(sessionStorage.getItem("user"), $("#txtMsg").val());
})
}).fail(function () { })
}
</script>
</head>
<body> <div id="msgList"> </div>
<input type="text" id="txtName"/>
<input type="text" id="txtMsg"/>
<button id="btnlogin">登录</button>
<button id="sendBtn" disabled="disabled">发送信息</button>
</body>
</html>

效果图如下:

以上就是SignalR的小栗子。。。

关于SignalR 进行双向多步对话的更多相关文章

  1. C# BS消息推送 SignalR介绍(一)

    1. 前言 本文是根据网上前人的总结得出的. 环境: SignalR2.x,VS2015,Win10 介绍 1)SignalR能用来持久客户端与服务端的连接,让我们便于开发一些实时的应用,例如聊天室在 ...

  2. SignalR一个集成的客户端与服务器库。内部的两个对象类:PersistentConnection和Hub

    SignalR 将整个交换信息的行为封装得非常漂亮,客户端和服务器全部都使用 JSON 来沟通,在服务器端声明的所有 hub 的信息,都会一般生成 JavaScript 输出到客户端. 它是基于浏览器 ...

  3. SignalR 实现web浏览器客户端与服务端的推送功能

    SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话. 换句话说,该对话可不受限制地进行单个无状态请求/响应数据交换:它将继 ...

  4. SignalR的安装

    介绍 SignalR 是 ASP.NET 团队正在开发的一个 Microsoft .NET Framework 库和 jQuery 插件,可能包括在以后版本的 ASP.NET 平台中. 它提供了一些前 ...

  5. SignalR安装以及安装问题

    正常节奏 介绍 SignalR 是 ASP.NET 团队正在开发的一个 Microsoft .NET Framework 库和 jQuery 插件,可能包括在以后版本的 ASP.NET 平台中. 它提 ...

  6. SignalR QuickStart

    原文:SignalR QuickStart SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话. 换句话说,该对话可不受限 ...

  7. 史上最全面的SignalR系列教程-1、认识SignalR

    SignalR 是什么? SignalR 是一个面向 ASP.NET 开发人员的库,可简化将实时 web 功能添加到应用程序的过程. 实时 web 功能是让服务器代码将内容推送到连接的客户端立即可用, ...

  8. Comet:基于 HTTP 长连接的“服务器推”技术解析

    原文链接:http://www.cnblogs.com/deepleo/p/Comet.html 一.背景介绍 传统web请求,是显式的向服务器发送http Request,拿到Response后显示 ...

  9. C# 常用工具合集

    Visual Studio 2013 扩展 Visual Studio 2013 Update 4:是目前微软发布的最新版开发工具升级包,高效而且强大.下面的扩展都是该版本的Visual Studio ...

随机推荐

  1. SDL软件安全读书笔记(一)

    # 如何应对当前的全球网络安全威胁? 开发安全漏洞尽可能少的软件,应该着眼于源头安全. 边界安全盒深度防御是重要的安全手段,但软件自身的安全是安全防护的第一关. 即使软件源头存在较少的漏洞,这些漏洞也 ...

  2. 用Visual C++创建WPF项目的三种主要方法

    用Visual C++创建WPF项目的三种主要方法 The problem with using XAML from C++ Because C++ doesn't support partial c ...

  3. DOM-BOM-EVENT(2)

    2.获取DOM元素的方法 2.1.getElement系列 documentElementById 通过id获取元素 <div id="box"></div> ...

  4. python之浅谈循环

    目录 流程控制之while循环 语法 while+break while+continue while+else while循环的嵌套 流程控制之for循环 语法 for+break for+cont ...

  5. (私人收藏)SQLite 全面手册以及教程

    SQLite 全面手册以及教程 https://pan.baidu.com/s/1VKzCWjF79fAiOLjAlx-3zwnfkp SQLite 全面手册以及教程 SQLite 简介 SQLite ...

  6. 如何使用JS操纵伪元素

    css引入伪类和伪元素概念是为了格式化文档树以外的信息.也就是说,伪类和伪元素是用来修饰不在文档树中的部分,比如,一句话中的第一个字母,或者是列表中的第一个元素. 伪类 用于当已有元素处于的某个状态时 ...

  7. MyBatis和Spring整合的奥秘

    本篇博客源码分析基于Spring 5.1.16.RELEASE,mybatis-spring 2.0.0,较高版本的mybatis-spring源码有较大区别. Spring之所以是目前Java最受欢 ...

  8. C# DataTable与Excel读取与导出

    /// <summary> /// Excel->DataTable /// </summary> /// <param name="filePath&q ...

  9. java动态代理基本原理及proxy源码分析一

    本系列文章主要是博主在学习spring aop的过程中了解到其使用了java动态代理,本着究根问底的态度,于是对java动态代理的本质原理做了一些研究,于是便有了这个系列的文章 为了尽快进入正题,这里 ...

  10. Jenkins - 解决集成 jmeter+ant 发送邮件时报错:java.lang.ClassNotFoundException: javax.mail.internet.MimeMessage

    jenkins + jmeter +ant 发送邮件失败 问题原因 其实就是缺失 jar 包,导致某些类找不到了 解决方案 点击该网站,下载commons-email.jar包 点击该网站,下载act ...