实现服务器端与客户端的高频实时通信 SignalR(2)
说明:本篇文章与上篇文章 实现服务器端与客户端的实时通信 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;
}
} });
实现服务器端与客户端的高频实时通信 SignalR(2)的更多相关文章
- 【转】Android Https服务器端和客户端简单实例
转载地址:http://blog.csdn.net/gf771115/article/details/7827233 AndroidHttps服务器端和客户端简单实例 工具介绍 Eclipse3.7 ...
- 【知识积累】服务器端获取客户端的IP地址(当客户端调用由Axis开发的WebService)
一.前言 由于项目中一个小的模块需要获取客户端的IP地址以保证安全调用webservice接口,项目中客户端使用C#编写,服务器端使用Java编写,服务器端与客户端采用Axis开发的WebServic ...
- pushlet实现服务器端向客户端推送信息
使用Pushlet来实现服务器端向客户端推送信息 1. 实现方式: 有两种实现方式: 1. 通过配置文件来实现定时的从服务器端向客户端推送信息 2. 通过API主动 ...
- net remoting 服务器端订阅客户端(附源代码)
remoting 在分布式应用中逐渐在企业级应用发展开来,最初提出分布式应用,主要目的是为了降低服务器的压力,将耗性能的处理放在另外一个程序中,然后将计算结果发送到另外一个应用中.而remoting就 ...
- gridview checkbox从服务器端和客户端两个方面实现全选和反选
GridView中的checkbox的全选和反选在很多的地方都是要求实现的,所以下面就从服务器端和客户端两个方面实现了checkbox的选择,感兴趣的朋友可以了解下,希望本文对你有所帮助 GridVi ...
- 使用Pushlet来实现服务器端向客户端推送信息
使用Pushlet来实现服务器端向客户端推送信息 1. 实现方式: 有两种实现方式: 1. 通过配置文件来实现定时的从服务器端向客户端推送信息 2. 通过A ...
- java 通过TCP\UDP 协议实现多人聊天,点对点,文件传送-----分服务器端和客户端
java 通过TCP\UDP 协议实现多人聊天,点对点,文件传送-----分服务器端和客户端 启动界面如下图: 首先启动服务器: 客户端登陆,登陆成功后为: 默认发送是全部用户,是多人发送. 当在边列 ...
- python服务器端、客户端的模型,客服端发送请求,服务端进行响应(web.py)
服务器端.客户端的模型,客服端发送的请求,服务端的响应 相当于启动了一个web server install web.py 接口框架用到的包 http://webpy.org/tutorial3.zh ...
- centos shell编程3【告警系统】 没有服务器端和客户端的概念 main.sh mon.conf load.sh 502.sh mail.php mail.sh disk.sh 第三十七节课
centos shell编程3[告警系统] 没有服务器端和客户端的概念 main.sh mon.conf load.sh 502.sh mail.php mail.sh disk.sh 第三十七 ...
随机推荐
- [工作中的设计模式]单例模式singleton
一.模式解析: 单例模式是最简单和最常用的设计模式,面试的时候,不管新毕业的学生还是已经工作多年的筒子,对单例模式基本都能聊上两句.单例模式主要体现在如下方面: 1.类的构造函数私有化,保证外部不能直 ...
- java中 ==与equals 有什么区别?
1.==既可以比较基本类型变量,又可比较引用类型变量,而equals只能比较引用类型变量: 2.equals方法支持重写,如果未重写equals方法,则比较引用变量时与==都是比较变量所指向的对象地址 ...
- applet示例 WelcomeApplet.java <Core Java>
import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.Font; import java.awt.Grap ...
- XIII Open Cup named after E.V. Pankratiev. GP of SPb
A. Graph Coloring 答案为$1$很好判,为$2$只需要二分图染色,对于$3$,首先爆搜哪些边要染成第$3$种颜色,然后二分图染色判定即可. B. Decimal Fraction 枚举 ...
- 怎样测试TCP&UDP端口
TCP端口大家都知道,比如80端口,可以使用 telnet ip 80,来验证端口是否正常监听,那UDP端口是否可以同样测试呢?详细如下: 下面我们来进行测试,123端口是服务器42.11.12.13 ...
- Ipad 日程管理APP使用心得
1. Fetchnotes 界面简单干净,操作简单: 可以使用标签hashtags #来进行管理: 比较好的用户使用指南Tutorial: 可以与好友分享,只需要@somebody即可 2. Lume ...
- Android 蓝牙4.0 BLE
Android ble (Bluetooth Low Energy) 蓝牙4.0,也就是说API level >= 18,且支持蓝牙4.0的手机才可以使用. BLE是蓝牙4.0的核心Profil ...
- ACM: HDU 1028 Working out 解题报告-DP
Working out time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- 【noiOJ】p1776
t1776:木材加工 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目是给 ...
- 对GitHub的认识
Github创建于2008年被市场研究公司Forrester称作开发者的Facebook .作为开源代码库以及版本控制系统,Github拥有140多万开发者用户.随着越来越多的应用程序转移到了云上,G ...