实现服务器端与客户端的高频实时通信 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;
                }
            }

        });

      

时间: 2024-08-21 21:17:51

实现服务器端与客户端的高频实时通信 SignalR(2)的相关文章

基于C/S架构的3D对战网络游戏C++框架 _01服务器端与客户端需求分析

本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): 1.实现基本通信框架,包括对游戏的需求分析.设计及开发环境和通信框架的搭建: 2.实现网络底层操作,包括创建线程池.序列化网络包等: 3.实战演练,实现类似于CS反恐精英的3D对战网络游戏: 技术要点:C++面向对象思想.网络编程.Qt界面开发.Qt控件知识.Boost智能指针.STL算法.STL.

服务器端获取客户端的IP地址(当客户端调用由Axis开发的WebService)

一.前言 由于项目中一个小的模块需要获取客户端的IP地址以保证安全调用webservice接口,项目中客户端使用C#编写,服务器端使用Java编写,服务器端与客户端采用Axis开发的WebService进行通信.服务器端维护IP白名单列表,只有IP地址在白名单中的客户端才可以成功调用到接口,获得服务. 二.代码清单 若要成功获取客户端IP地址,需要如下Jar包的支持. servlet-api.jar axis.jar axis2-kernel-1.6.2.jar 获取IP地址的具体代码如下: i

iOS socket Stream 服务器端 及 客户端 演示

iOS socket Stream 测试环境,mac osx 10.8 一:建立服务器端 由于mac osx10.8 已经集成 python2和 Twisted,我们可以直接利用此,构建一个简单的socket 服务器 如下测试一个简单的聊天 socket 并,定义,加入聊天时发送:iam:用户名 发送信息时:msg:信息 终端:vim server.py  回车,copy入如下代码 from twisted.internet.protocol import Factory, Protocol f

【转】Android Https服务器端和客户端简单实例

转载地址:http://blog.csdn.net/gf771115/article/details/7827233 AndroidHttps服务器端和客户端简单实例 工具介绍 Eclipse3.7 Tomcat 6.0.18(免安装版) Android2.1开发环境(在Eclipse中配置好) 前提条件 JDK环境要使用我们自己安装的,笔者JDK安装目录为D:\Java\jdk1.6.0_22,在Eclipse的Window-preference-installedJREs中,只选用我们自己安

如何在服务器端获取客户端的数据

asp.net服务端代码如何获取客户端控件的值? 2009-09-27 15:47:02|  分类: PC|举报|字号 订阅 在login.aspx页面中有一个INPUT客户端控件 <input type="text" id="txtUserName" maxlength="20" /> 现在要在login.aspx.cs文件后台编码中获取这个txtuserName的value值. 有三种方法:   一.把txtUserName作为服

WebService的helloworld,服务器端与客户端的Demo(转)----自己建立的Web Project , 而不是Web Service Project,利用WSDD 自己发布

WebService的helloworld,服务器端与客户端的Demo http://blog.csdn.net/angus_17/article/details/8032856 今天突然兴起,想学学webService,然后就找找资料,做了个简单的DEMO.先记录下来,以便日后使用. 首先,先说点理论上的东西. WebService又是一种高级应用,与之前学习的Struts.Spring.Hibernate等框架不同.WebService是面向服务的架构(SOA),看起来像是比SSH框架要大.

gridview checkbox从服务器端和客户端两个方面实现全选和反选

GridView中的checkbox的全选和反选在很多的地方都是要求实现的,所以下面就从服务器端和客户端两个方面实现了checkbox的选择,感兴趣的朋友可以了解下,希望本文对你有所帮助 GridView中的checkbox的全选和反选在很多的地方都是要求实现的,所以下面就从服务器端和客户端两个方面实现了checkbox的选择. 1.服务器端 html代码如下: <asp:GridView ID="GridView1" runat="server" AutoG

C#中使用Redis学习一 windows安装redis服务器端和客户端

学习背景 今天是2015年1月2日,新年刚开始的第二天,先祝大家元旦快乐啦(迟到的祝福吧^_^).前段时间一直写Jquery插件开发系列博文,这个系列文章暂停一段时间,最近一直在看redis,我将把redis作为一个系列写一下我的学习历程.正好现在项目中使用了redis,本着学习探索的精神,准备写一下我对redis的一个学习历程和自己的一点感悟.在学习过程中也走了很多弯路,希望能对看这篇博文的朋友们带来点帮助.也算是写这边博文的最大目的了. 我在认识redis之前没有接触过任何NoSql思想.对

Java网络编程——服务器端和客户端互发信息

引言 ? ? 为了学习Java网络编程,用一个QQ(屌丝版)作为例子练手,记录屌丝版QQ的开发过程,这里我们认为已经掌握其中的网络基础部分,即HTTP协议,TCP/IP协议等,在此基础上我们开始我们的Java网络部分的学习,我们要知道服务器和客户端是如何通信的,首先我们要了解Java网络知识中的一个很重要的东西--Socket ? ? Socket初探 ? ? ServerSocket和Socket ? ? 首先服务器端需要用到java.net包下的ServerSocket类,该类的一个实例用于