当前位置: 首页 > 编程日记 > 正文

mvc 下的 signalR使用小结

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

sirnal下有两种使用。

一种是 Persistent Connection ,另外一种是Hubs 。详细请看 https://github.com/SignalR/SignalR/wiki ;

hubs支持浏览器与客户端互相调用方法。所以应用更广泛。

在前台页面上写上如下脚本:


//初始化signalrfunction initSignalr(parameters) {var chat = $.connection.chat;//这里的chat为服务器上的继承了HUB的类的HubName。chat.client.addMessage = function(msg) {$('#submit').trigger('click');$('#submit2').trigger('click');};$.connection.hub.start().done(function() {});}

上面给client写了一个addmessage方法。之后,服务器将调用它

下面这条语句执行的方法是空的,但是必须要有


$.connection.hub.start().done(function() {});
在页面加载完毕后会通过此方法向浏览器发送请求。function里可以写一些绑定事件,如:当点击按钮后,


调用了服务器的send方法。send必须是服务器上有的


$.connection.hub.start().done(function() {$("#broadcast").click(function () {// Call the chat method on the serverchat.server.send($('#msg').val());});});


然后在document ready方法中注册此方法:
$(function () {initDateSelect();initTableSelect();resetTableTile();initSignalr();})


需要在页面中引入jquery.js,signalr.js以及hubs.js,在mvc中,hub.js可以通过请求服务器获得,


<script src="~/Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery.signalR-1.0.1.min.js" type="text/javascript"></script>
<script src="~/signalr/hubs" type="text/javascript"></script>
服务器在global.asax中注册映射:  



RouteTable.Routes.MapHubs();
编写类继承自hub: 服务器中 实现了上面的send



namespace CYINC.MOMain.Plugin.LiveCharts.Connection
{[HubName("chat")]public class DJ_Connection : Hub{public void Send(string message){Clients.All.addMessage(message);}}
}

注意,这里的DJ_Connection继承了Hub,并且它有一个特性HubName:chat, 还记得页面中这个么:

var chat = $.connection.chat;//这里的chat为服务器上的继承了HUB的类的HubName。
chat是你需要建立hub连接的class的HubName的值。

在controller中,新建action对上面的类调用: addMessage为客户端的脚本中的方法,所以脚本中,此方法也必须有实现。

//通过web请求向客户端发送消息public ActionResult Send(){var context = GlobalHost.ConnectionManager.GetHubContext<DJ_Connection>();context.Clients.All.addMessage("Admin");//这里的admin是随便写的,因为客户端并不需要接收此消息,仅仅是收到消息ajax重新请求数据return null;}

不能够直接访问Hub的对象。必须要这样才行:

var context = GlobalHost.ConnectionManager.GetHubContext<DJ_Connection>();

这样就能通过给发送http请求,来触发send方法,send方法通过hub调用客户端(浏览器)的addMessage方法。来控制所有客户端做一些事情。比如一起更新数据等。

====================================================================

sql server的表触发器可以这样写:(首先开启数据库的clr支持)

--开启数据库CLR 支持
exec sp_configure 'clr enabled', 1;
--开始数据的验证
alter database MOMain set TRUSTWORTHY on;--相应数据库
RECONFIGURE

数据库clr集成的dll这样写,当数据库触发CallWeb方法时,发送上面的send请求给服务器:

namespace SqlDependency
{public class Program{/// <summary>/// 给指定的URL发送请求,服务器收到请求将通知客户端拉数据,此dll将集成到数据库的触发器/// </summary>/// <param name="url"></param>/// <returns></returns>[SqlFunction(IsDeterministic = true, DataAccess = DataAccessKind.Read)]public static String CallWeb(String url){WebRequest req = WebRequest.Create(url);var rep = req.GetResponse();return "1";}}
}
编译后,将此dll集成到数据库:
use MOMain;--数据库名
create assembly SqlDependency FROM 'D:\SqlDependency.dll'--程序集名称和地址
WITH PERMISSION_SET = UNSAFE
GO--方法名写正确,为程序集中的方法名,注意参数个数
create function CallWeb(@FileFullName as nvarchar(max))
returns nvarchar(max)
with returns null on null input
external name [SqlDependency].[SqlDependency.Program].[CallWeb]
GO--编写触发器,传递参数以及
CREATE TRIGGER [dbo].[UserTableChangedEvent] on [dbo].[dj_chanchu_10min]  --表名称FOR INSERT, DELETE, UPDATE  --当有增删改时,触发器将被触发AS  BEGIN  DECLARE @URL AS VARCHAR(150)  SET @URL = 'http://localhost/djcharts/send';  --服务器接收请求的urlSelect dbo.WriteStringToFile(@URL)                   END  GO

这样,当表数据有变化时。会发送http请求给服务器,服务器通知所有的浏览器重新拉一次数据。做到了实时更新,实时监控。
















转载于:https://my.oschina.net/u/867090/blog/123474

相关文章:

利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数

1、 打开Eclipse&#xff0c;File-->New-->Project…-->Android-->AndroidApplication Project,Next-->Application Name:FillTriangle, PackageName:com.filltriangle.android,Minimum Required SDK:API 10Android2.3.3(Gingerbread),Next--&g…

Python三十年技术演变史

作者 | 宋天龙&#xff0c;大数据技术专家&#xff0c;触脉咨询合伙人兼副总裁&#xff0c;前Webtrekk中国区技术和咨询负责人&#xff08;Webtrekk&#xff0c;德国的在线数据分析服务提供商&#xff09;。擅长数据挖掘、建模、分析与运营&#xff0c;精通端到端数据价值场景设…

php 扩展包链接

https://pecl.php.net/package-stats.php?cid7转载于:https://www.cnblogs.com/gaoyuechen/p/10148754.html

面向中小企业的视频云服务 视频托管

2019独角兽企业重金招聘Python工程师标准>>> 面向中小企业的视频云服务解决方案 如果你是一个传统的企业网站&#xff0c;想要在网站首页加入一段视频&#xff0c;或者是一个垂直资讯网站想要开设视频频道&#xff0c;又或者想要进行一项活动的在线直播。这时候也许…

VS2010下编译OpenCV2.4.6静态库

1、 从 http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.3/ 下载最新的OpenCV2.4.6&#xff1b; 2、 将OpenCV-2.4.6.0.exe存放到D:\Soft\OpenCV2.4.6文件夹下&#xff0c;解压到当前文件夹下&#xff0c;生成一个opencv文件夹&#xff1b; 3、 下…

【性能优化之道】每秒上万并发下的Spring Cloud参数优化实战

一、写在前面 相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构&#xff0c;毕竟现在这是非常火的一门技术。 如果只是用户量很少的传统IT系统&#xff0c;使用Spring Cloud可能还暴露不出什么问题。 如果是较多用户量&#xff0c;高峰每秒高达上万并发请求的互联…

共话数据智能新经济,首届市北·GMIS 2019全球数据智能峰会隆重召开

7月19日&#xff0c;上海市市北高新技术服务业园区&#xff08;以下简称“市北高新”&#xff09;成功举办首届「市北GMIS 2019全球数据智能峰会」&#xff08;以下简称“市北GMIS峰会”&#xff09;。为期两天的市北GMIS峰会以“拥抱数智经济&#xff0c;赋能产业生态”为主题…

最新剑桥《AI全景报告》出炉:中国发表机器学习学术研究超过美国

来源 | 转载自新智元&#xff08;ID:AI_era&#xff09;2019年即将过去一半&#xff0c;剑桥大学的两位研究人员近日推出了本年度的State AI 2019全景报告。本报告基本沿袭去年的大体框架&#xff0c;从产业、人才、政策、预测等方面对过去一年来AI领域的技术的新进步、产业格局…

《OpenMP编译原理及实现技术》摘录

内容摘自《OpenMP编译原理及实现技术》第2章 代码测试环境&#xff1a;Windows7 64bit, VS2010, 4核机。 可以说OpenMP制导指令将C语言扩展为一个并行语言&#xff0c;但OpenMP本身不是一种独立的并行语言&#xff0c;而是为多处理器上编写并行程序而设计的、指导共享内存、多…

C# 36进制转10进制

代码是Java转过来的&#xff0c;变量名都没有改……有空再整理一下好了。public long toDecimal(string input, long bs){try{long Bigtemp 0, temp 1;int len input.Length;for (int i len - 1; i > 0; i--){if (i ! len - 1)temp * bs;long num changeDec(input[i]);…

Oracle Cloud Native Framework推出云原生解决方案

摘要&#xff1a;Oracle Cloud Native Framework云原生平台提供托管云服务和本地软件&#xff0c;同时在现Oracle云基础架构上跨应用程序配置和分析大量服务。developer relations for Oracle Cloud Infrastructure副总裁Bob Quillin讨论了该框架的优势以及对2019年云原生市场的…

OpenMP知识点汇总

1. OpenMP(Open Multi-Processing)官网&#xff1a;http://openmp.org/wp/ 2. OpenMP最新版本4.0&#xff0c;2013年7月发布。Visual Studio 2010内置支持OpenMP2.0&#xff0c;选中工程属性->C/C->Language->Open MP Support:选中Yes(/openmp)即可&#xff0c;然后在…

chsop 兼容jquery(解决与transport.js冲突)

2019独角兽企业重金招聘Python工程师标准>>> $(function() { window.__Object_toJSONString Object.prototype.toJSONString; delete Object.prototype.toJSONString; }); 要用到jquery的页面放入此代码即可 转载于:https://my.oschina.net/netmouse/blog/1241…

进程详细剖析(二)

摘自《C多核高级编程》 5.6.3 进程状态 在进程执行期间&#xff0c;它的状态会发生改变。进程的状态时指进程的当前状况。在POSIX兼容的环境中&#xff0c;进程可以处于以下状态&#xff1a; 1&#xff09;运行&#xff08;running&#xff09; 2&#xff09;就绪(runnable, r…

AI算力需求6年增长30万倍,「超异构计算」才能满足下一个10年

今年 3 月&#xff0c;「强化学习教父」Richard Sutton 在《苦涩的教训》一文中指出&#xff0c;「70 年的人工智能研究史告诉我们&#xff0c;利用计算能力的一般方法最终是最有效的方法。要在短期内有所提升&#xff0c;研究人员要利用专门领域的人类知识。但如果想要长期的获…

一览六月最热的5篇AI技术论文

作者 | 神经小姐姐转载自HyperAI超神经&#xff08;ID: HyperAI&#xff09;导语&#xff1a;始建于 1991 年的 arXiv.org 至今已收录超过 100 万篇论文预印本&#xff0c;近年来&#xff0c;其每月提交量已经超过 1 万篇。这里成为一个巨大的学习宝库。本文罗列了 arXiv.org 上…

OnCheckedChanged的触发需要AutoPostBack=true

OnCheckedChanged的触发需要AutoPostBack"true"

OpenCV中resize函数五种插值算法的实现过程

最新版OpenCV2.4.7中&#xff0c;cv::resize函数有五种插值算法&#xff1a;最近邻、双线性、双三次、基于像素区域关系、兰索斯插值。下面用for循环代替cv::resize函数来说明其详细的插值实现过程&#xff0c;其中部分代码摘自于cv::resize函数中的源代码。 每种插值算法的前…

企业金融云存储建设之路

当前世界形势千变万化&#xff0c;各种技术创新层出不穷&#xff0c;新兴业务模式也是波谲云诡&#xff0c;企业的信息化建设如何紧跟业务&#xff0c;适应业务乃至驱动业务转型是各级管理者的头等题目。对于底层执行者&#xff0c;如何能够快速满足企业的要求&#xff0c;如何…

【原创】VB利用堆栈实现算术表达式计算

这个抽象算法早已为人所知&#xff0c;只不过在VB的公开文档中鲜见示例代码。于是&#xff0c;为了提高自己的程序设计水平&#xff0c;锻炼自己的能力&#xff0c;我写了如下代码。 【VB代码版权所有&#xff0c;允许转载修改用作学习目的&#xff0c;转载必须注明来源】 【求…

树莓派4与英伟达Jetson Nano性能大比拼,谁是最佳的嵌入式“电脑”?

作者 | Chris Pietschmann译者 | 弯月&#xff0c;责编 | 屠敏转载自CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;导读&#xff1a;日前&#xff0c;Raspberry 基金会发布了开发者为之兴奋的 Raspberry Pi 4&#xff0c;其不仅在性能上进行了全面的升级&#xff0c;而且…

作为互联网流量入口,CDN日志大数据你该怎么玩?

CDN是非常重要的互联网基础设施&#xff0c;用户可以通过CDN&#xff0c;快速的访问网络中各种图片&#xff0c;视频等资源。在访问过程中&#xff0c;CDN会产生大量的日志数据&#xff0c;而随着如今越来越复杂的网络环境变化&#xff0c;和业务的迅速增长&#xff0c;日志数据…

OpenCV中图像旋转(warpAffine)算法的实现过程

在OpenCV中&#xff0c;目前并没有现成的函数直接用来实现图像旋转&#xff0c;它是用仿射变换函数cv::warpAffine来实现的&#xff0c;此函数目前支持4种插值算法&#xff0c;最近邻、双线性、双三次、兰索斯插值&#xff0c;如果传进去的参数为基于像素区域关系插值算法(INTE…

10亿美元续命!OpenAI获微软投资,意在通用人工智能?

来源 | OpenAI官博译者 | 孙薇编辑 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 7 月 22 日&#xff0c;微软宣布将对非营利人工智能研究组织 OpenAI 投资 10 亿美元&#xff0c;用于通用人工智能&#xff08;AGI&#xff09;的开发。双方将以微软原有的公…

TrayIcon 类 添加系统托盘不显示托盘图标

为什么80%的码农都做不了架构师&#xff1f;>>> 好久不碰 java swing最近写了一个swing 程序 添加托盘时&#xff0c;怎么也不显示图标&#xff0c;就一空白 &#xff0c;在网上搜了老半天&#xff0c;大部无效。 边看帖子边看 java api ,结合理解,有一属性设置了一…

Crystal Report 加载模板报错 无法在c++ 堆栈中打开由jrc 引擎处理的文档

2019独角兽企业重金招聘Python工程师标准>>> 纠结了很久, 尝试过录入一个错误的路径,文件读取也是包相同的错误,也就是表示找不到路径文件而已,并不是开发环境的问题 于是设置一个最简单的路径,放置下去rpt模板,代码后续没有报错; 再次之前也修复了一个关于引用的dl…

Ubuntu下makefile及gcc生成静态库动态库的简单使用举例

环境&#xff1a;Ubuntu-13.10 32位(虚拟机)、gcc4.8.1 首先创建一个test_makefile_gcc文件夹&#xff0c;此test_makefile_gcc文件夹下包括&#xff1a;src文件夹用于存放源文件&#xff1b; include文件夹用于存放头文件&#xff1b;bin文件夹用于存放生成的动态库.so文件&…

Exchange Server 2013 安装完成后配置外部URL

Exchange Server 2013 安装完成后配置外部URL 比如 mail.contoso.com 1、转到 EAC → “服务器”&#xff0c;然后单击“配置外部访问域”。2、在“选择要与外部 URL 一起使用的客户端访问服务器”下面&#xff0c;单击“添加”3、选择您要配置的客户端访问服务器&#xff0c;…

Ubuntu下CodeBlocks的安装、配置及静态库动态库的简单使用举例

1、 从Ubuntu Software Center中搜索Code::Blocks并安装&#xff1b; 2、 在第一次启动时选择GNU GCC Compiler作为默认的编译器&#xff1b; 3、 生成静态库并调用操作步骤&#xff0c;代码同 http://blog.csdn.net/fengbingchun/article/details/17994489 3.1、New fil…

React 打怪笔记

介绍 本文为学习react中的记录。 Tips: 当组件的props或state有变化&#xff0c;执行render函数。无论是使用函数或是类来声明一个组件&#xff0c;它决不能修改它自己的propsReact 可以将多个setState() 调用合并成一个调用来提高性能。无状态函数式组件 (stateless functiona…