说明:本篇文章与上篇文章 实现服务器端与客户端的实时通信 SignalR(1) 基本代码类似,只是做了些处理 高频 的改动。

一、本文出处:SignalR 实例介绍 (建议看原著里面有DEMO下载)

二、这篇文章介绍如何利用 VS2012 创建一个简单的实时高频反馈系统,建好后的样子如下:拖动某个窗口的红色框,其余窗口的红色框跟着运动。

三、Demo 创建

  1、新建项目以及新建完成后的目录结构如上篇文章所示(项目名称为 MoveShape):

  2、安装 SignalR 程序包,该包实现了服务端与客户端的通信。

    与上篇的区别在于,此处需要另外安装 Jquery.UI 的程序包,运行命令:Install-Package jQuery.UI.Combined。

   3、添加类用于接收客户端的信息以及广播收到的信息,该类的名字命名为: MoveHub.cs,该类继承自 Hub 类,并在该类中添加如下代码:

namespace MoveShape
{
[HubName("MoveHub")]
public class MoveHub : Hub
{
[HubMethodName("UpdateOtherModel")]
public void UpdateOtherModel(ServerModel clientModel)
{
clientModel.LastUpdatedBy = Context.ConnectionId;
// 更新在Web端注册的站点 Model(去掉了当前的发送者)
Clients.AllExcept(clientModel.LastUpdatedBy).updateShape(clientModel);
}
}
public class ServerModel
{
//将传输的 Json 属性定义为与客户端一样的名字 left top
[JsonProperty("left")]
public double Left1 { get; set; }
[JsonProperty("top")]
public double Top2 { get; set; }
// 拒绝客户端获得 LastUpdatedBy 属性
[JsonIgnore]
public string LastUpdatedBy { get; set; }
}
}

  4、添加启动类用于配置路由,该类的名字命名为:Startup.cs,与上篇文章代码一样。

   5、添加HTML页面用于发送以及接受消息,该HTML页面的名字命名为:MoveShape.Html ,代码如下:

   HTML: 

<div id="shape" ></div>

    CSS:

 <style>
#shape {
width: 100px;
height: 100px;
background-color: #FF0000;
}
</style>

     脚本:

      

<script src="Scripts/jquery-1.6.4.min.js"></script>
<script src="Scripts/jquery-ui-1.11.4.min.js"></script>
<script src="Scripts/jquery.signalR-2.2.0.min.js"></script>
<script src="/signalr/hubs"></script>
<script>
$(function () {
var moveShapeHub = $.connection.MoveHub;
$shape = $("#shape");
shapeModel = {
left: 0,
top: 0
};
moveShapeHub.client.updateShape = function (model) {
shapeModel = model;
$shape.css({ left: shapeModel.left, top: shapeModel.top }); };
$.connection.hub.start().done(function () {
$shape.draggable({
drag: function () {
shapeModel = $shape.offset();
moveShapeHub.server.UpdateOtherModel(shapeModel);
}
});
});
});
</script>

  6、运行该HTML页面,复制到不同标签页,就可以实现拖动功能的互动。

 7、上面的操作与我们上一篇的发送以及接受机制完全一样,但是在拖动红色框的过程中,一直在向服务器发送信息,这样非常浪费资源,因此我们可以在客户端使用 setInterval 来控制发送的频率改动JS脚本如下:

 <script>
$(function () {
var moveShapeHub = $.connection.MoveHub;
$shape = $("#shape");
shapeModel = {
left: 0,
top: 0
}; updateRate = 2000;
moved = false
; moveShapeHub.client.updateShape = function (model) {
shapeModel = model;
$shape.css({ left: shapeModel.left, top: shapeModel.top }); };
$.connection.hub.start().done(function () {
$shape.draggable({
drag: function () {
shapeModel = $shape.offset();
//moveShapeHub.server.UpdateOtherModel(shapeModel);
moved = true;
}
}); setInterval(updateServerModel, updateRate);
}); function updateServerModel() {
// Only update server if we have a new movement
if (moved) {
moveShapeHub.server.UpdateOtherModel(shapeModel);
moved = false
;
}
}
});

      

最新文章

  1. 搞了我一下午竟然是web.config少写了一个点
  2. MTU(Maximum transmission unit) 最大传输单元
  3. 华为oj 购物单
  4. shell中$0,$?,$!等变量意义
  5. HBase的伪分布式安装(原创)
  6. JVM之类加载器上篇
  7. confluence5.6安装
  8. dedecms 忘记后台密码
  9. 李洪强iOS开发之后使用纯代码实现横向滚动的UIScrollView
  10. Struts2_概述
  11. 1156. Two Rounds(dfs+背包)
  12. currentTarget 与 Target 的区别
  13. linux 双网关双IP设置
  14. zabbix server is not running: the information displayed may not be current
  15. C++ 头文件系列(unordered_map、unordered_set)
  16. js介绍
  17. poj_2115C Looooops(模线性方程)
  18. Docker 容器资源限制
  19. oracle安装教程
  20. Windows下struct和union字节对齐设置以及大小的确定(一 简介和结构体大小的确定)

热门文章

  1. [技术学习]js正则表达式汇总
  2. 线段树(多棵) HDOJ 4288 Coder
  3. Codeforces Round #336 (Div. 2)
  4. 快学Java NIO 续篇
  5. 注册事件处理程序onclick和addEventListener、attachEvent
  6. js中typeof与instanceof区别
  7. BZOJ 1412 &amp; 最小割
  8. ACM: 限时训练题解-Epic Professor-水题
  9. [题解+总结]动态规划大合集II
  10. tornado 学习笔记4 异步以及非阻塞的I/O