SignalR是利用html5 sokit方式实现网页的实时性,在客户端不支持html5的情况下通过轮询实现

实现原理是客户端发送的消息先去服务器,然后服务器根据需要将消息广播到需要接收信息的客户群。

添加对应的包 nuget:install-package Microsoft.AspNet.SignalR.nuget会帮忙处理将需要的包都添加到项目中。nuget以后会看到项目多出一些引用:Microsoft.Owin,Microsoft.AspNet.SignalR等。多出一个script文件夹,文件夹里有SignalR依赖的jquery包以及SignalR.js

到这一步准备工作就做好了。

分析一下:这个组件本身实现的是一个网页实时聊天,刚刚也说了是客户端先将消息发送到服务端,服务端处理然后再广播到需要接收消息的客户端。

这么说的话,必然会有一个接收客户端消息的服务端程序存在。这一点跟Ajax非常类似,客户端发送消息,给服务端,然后服务端返回数据更新部分页面。然而SignalR不只可以在web中使用也可在winform程序中使用(文档中有说明)。那要在web中使用SignalR就必然要告诉程序SigalR不同于一般的后台程序,它不是一个普通的dll

我用mvc空模板做的例子,在执行完Global.asax中的内容会直接执行这里边的内容。我的理解里这就是实现那所谓的接口跟SignalR扯上关系了。

---------------------这一步非常关键。不能省略,

然后加一个控制器,加个视图。  加上一个SignalR的控制中心

解释一下代码

$(function () {}文档加载完毕以后,执行以下内容:

$.connection.testhub;连接到testhub控制中心(跟实现了hub类的类名相对应,如有必要可在类前加描述[HubName("控制名称")],在客户端就应该使用:$.connection.控制名称)

$.connection.hub.logging;查看调试信息,firebug中切换到控制器就能看到每一步执行的状态。

chart.client.addNewMessageToPage = function (message) {
            $("#message").append(message + "<br/>");
        }

实现服务端定义的客户端方法接口这里对应的是sendmessage中addNewMessageToPage方法,可以传递一个参数。。

chart.client.del同上。

$.connection.hub.start().done(function () {
            chart.state.username = "test";//客户端给服务端发送需要的变量
            chart.server.joinGroup("ClientGroup");//将客户添加到组  这里可以是从数据库查询得到的数据
            $("#btnok").click(function () {
                chart.server.sendmessage($("#input").val());
            });
            $("#btndel").click(function () {
                chart.server.clearmessage();
            });
        });

这里边就是成功连接到控制中心以后需要执行的一些东西。 chart.state.username = "test";定义变量

然后就是调用下服务端的方法:chart.server.joinGroup("ClientGroup");//将本客户端添加到组ClientGroup

$("#btnok").click(function () {
                chart.server.sendmessage($("#input").val());
            });

单击事件:调用服务端方法,

服务端只做一件事情(接收客户端发送的消息),然后根据需要把消息广播(添加一个客户端方法接口,具体怎么实现实在客户端做)

客户端:实现服务端定义好的接口。然后在需要的时候给服务端发送消息..

然后补充一点:每个客户端在连接到控制中心的时候会生成一个随机的userid.所以想要实现两个用户的网页聊天,需要将两个人所有客户端的连接加到同一个组里面进行消息广播。这样就可以实现消息的同步,可以同时手机上,ipad上,以及电脑上同时实现消息的广播,具体实现提示: chart.state.username = "test";//客户端给服务端发送需要的变量。。

SignalR实现网页实时聊天功能的更多相关文章

  1. SignalR入门一、通过 SignalR 2 进行实时聊天

    一:什么是signalR Asp.net SignalR是微软为实现实时通信的一个类库.一般情况下,signalR会使用JavaScript的长轮询(long polling)的方式来实现客户端和服务 ...

  2. 网页实时聊天之PHP实现websocket

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  3. 网页实时聊天之js和jQuery实现ajax长轮询

    众所周知,HTTP协议是无状态的,所以一次的请求都是一个单独的事件,和前后都没有联系.所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的长时间联系,从而源源不段地获取信息. 一直以来的方式 ...

  4. [转]网页实时聊天之js和jQuery实现ajax长轮询 PHP

    网页实时聊天之js和jQuery实现ajax长轮询 众所周知,HTTP协议是无状态的,所以一次的请求都是一个单独的事件,和前后都没有联系.所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的 ...

  5. 网页实时聊天之PHP如何实现websocket

    网页实时聊天之PHP如何实现websocket 一.总结 一句话总结: 应用 PHP 的 socket 函数库:PHP 的 socket 函数库跟 C 语言的 socket 函数非常类似 PHP 实现 ...

  6. SignalR实时聊天功能

    使用vs2013新建一个空的asp.net 工程 添加SignalR集线器类MyHub.cs using System; using System.Collections.Generic; using ...

  7. [Asp.net 开发系列之SignalR篇]专题二:使用SignalR实现酷炫端对端聊天功能

    一.引言 在前一篇文章已经详细介绍了SignalR了,并且简单介绍它在Asp.net MVC 和WPF中的应用.在上篇博文介绍的都是群发消息的实现,然而,对于SignalR是为了实时聊天而生的,自然少 ...

  8. 微信小程序实现即时通信聊天功能的实例代码

    项目背景:小程序中实现实时聊天功能 一.服务器域名配置 配置流程 配置参考URL:https://developers.weixin.qq.com/miniprogram/dev/api/api-ne ...

  9. php websocket-网页实时聊天之PHP实现websocket(ajax长轮询和websocket都可以时间网络聊天室)

    php websocket-网页实时聊天之PHP实现websocket(ajax长轮询和websocket都可以时间网络聊天室) 一.总结 1.ajax长轮询和websocket都可以时间网络聊天室 ...

随机推荐

  1. Javascript高性能编程-提高数据访问速度

         hasOwnProperty()仅检索实例不检索原型,in即检索实例,又检索原型      成员嵌套越深,访问速度越慢,只在必要的情况下使用对象成员.      如果在同一个函数中你要多次读 ...

  2. 原生JS实战:写了个一边玩游戏,一边记JS的API的游戏

    本文是苏福的原创文章,转载请注明出处:苏福CNblog:http://www.cnblogs.com/susufufu/p/5878913.html 本程序[一边玩游戏,一边记JS的API]是本人的个 ...

  3. Android界面架构(Activity,PhoneWiondow,DecorView)简介

    在一个Android应用程序中,用户界面通过View和ViewGroup对象构建.所有View的子类成为"Widget",所有ViewGroup的子类成为"Layout& ...

  4. [IOS 开发] NSDateFormatter的格式字符串 -- 《整理的笔记》

    在ios开发中, OBjective-C中的NSDate是一个挺讨厌的类型, 自己找不到转换成字符串的类型,还得带一个NSDateFormatter的类型. 官方文档上对NSDateFormatter ...

  5. 一步步学习 Spring Data 系列之JPA(二)

    继上一篇文章对Spring Data JPA更深( )一步剖析. 上一篇只是简单的介绍了Spring Data JPA的简单使用,而往往在项目中这一点功能并不能满足我们的需求.这是当然的,在业务中查询 ...

  6. 如何用Github版本控制非Github库

    Git的图形化客户端有很多,不同的人可能习惯用不同的客户端.本人更习惯于Github的客户端,因为上Github比较多,同步代码到Github用官方的客户端是最方便的,所以也就更习惯于使用Github ...

  7. 简历生成平台项目开发-STEP3第一次项目例会探讨

    时间:2016.7.13周三7点半 地点:图书馆 讨论主题:项目需求和功能分析.第一次任务分配 内容:按照之前的讨论,我们认为简历生成功能,不仅要适应学生求职的需求,更多的是要在格式和内容上满足HR的 ...

  8. (七)Transformation和action详解-Java&Python版Spark

    Transformation和action详解 视频教程: 1.优酷 2.YouTube 什么是算子 算子是RDD中定义的函数,可以对RDD中的数据进行转换和操作. 算子分类: 具体: 1.Value ...

  9. Reactor 模式的简单实现

    Reactor 模式简单实现 在网上有部分文章在描述Netty时,会提到Reactor.这个Reactor到底是什么呢?为了搞清楚Reactor到底是什么鬼,我写了一个简单的Demo,来帮助大家理解他 ...

  10. Mysql联合,连接查询

    一. 联合查询    UNION, INTERSECT, EXCEPT UNION运算符可以将两个或两个以上Select语句的查询结果集合合并成一个结果集合显示,即执行联合查询.UNION的语法格式为 ...