SignalR实现网页实时聊天功能
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实现网页实时聊天功能的更多相关文章
- SignalR入门一、通过 SignalR 2 进行实时聊天
一:什么是signalR Asp.net SignalR是微软为实现实时通信的一个类库.一般情况下,signalR会使用JavaScript的长轮询(long polling)的方式来实现客户端和服务 ...
- 网页实时聊天之PHP实现websocket
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- 网页实时聊天之js和jQuery实现ajax长轮询
众所周知,HTTP协议是无状态的,所以一次的请求都是一个单独的事件,和前后都没有联系.所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的长时间联系,从而源源不段地获取信息. 一直以来的方式 ...
- [转]网页实时聊天之js和jQuery实现ajax长轮询 PHP
网页实时聊天之js和jQuery实现ajax长轮询 众所周知,HTTP协议是无状态的,所以一次的请求都是一个单独的事件,和前后都没有联系.所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的 ...
- 网页实时聊天之PHP如何实现websocket
网页实时聊天之PHP如何实现websocket 一.总结 一句话总结: 应用 PHP 的 socket 函数库:PHP 的 socket 函数库跟 C 语言的 socket 函数非常类似 PHP 实现 ...
- SignalR实时聊天功能
使用vs2013新建一个空的asp.net 工程 添加SignalR集线器类MyHub.cs using System; using System.Collections.Generic; using ...
- [Asp.net 开发系列之SignalR篇]专题二:使用SignalR实现酷炫端对端聊天功能
一.引言 在前一篇文章已经详细介绍了SignalR了,并且简单介绍它在Asp.net MVC 和WPF中的应用.在上篇博文介绍的都是群发消息的实现,然而,对于SignalR是为了实时聊天而生的,自然少 ...
- 微信小程序实现即时通信聊天功能的实例代码
项目背景:小程序中实现实时聊天功能 一.服务器域名配置 配置流程 配置参考URL:https://developers.weixin.qq.com/miniprogram/dev/api/api-ne ...
- php websocket-网页实时聊天之PHP实现websocket(ajax长轮询和websocket都可以时间网络聊天室)
php websocket-网页实时聊天之PHP实现websocket(ajax长轮询和websocket都可以时间网络聊天室) 一.总结 1.ajax长轮询和websocket都可以时间网络聊天室 ...
随机推荐
- C++02.访问控制
1.class是struct的扩展,它包括数据成员和成员函数. 2.在C++中,有三种访问权限: (1)private:默认,只供类内部的函数使用. (2)public:类外的程序可以使用. (3)p ...
- iOS 汉字的拼音
获取汉字的拼音 #import <Foundation/Foundation.h> @interface NSString (Utils) /** * 汉字的拼音 * * @return ...
- 从 HTTP 到 HTTPS - 什么是 HTTPS
这篇文章首发于我的个人网站:听说 - https://tasaid.com/,建议在我的个人网站阅读,拥有更好的阅读体验. 这篇文章与 博客园 和 Segmentfault 共享. 前端开发QQ群:3 ...
- Dynamics CRM 2011-RootComponent Type
笔者因为时不时要导出solution,对solution xml进行处理,所以把xml中的rootcomponent type列一下 Type Description 1 Entity 2 Attr ...
- iOS - UITableView中Cell重用机制导致Cell内容出错的解决办法
"UITableView" iOS开发中重量级的控件之一;在日常开发中我们大多数会选择自定Cell来满足自己开发中的需求, 但是有些时候Cell也是可以不自定义的(比如某一个简单的 ...
- ASP.NET MVC 5 02 - ASP.NET MVC 1-5 各版本特点
参考书籍:<ASP.NET MVC 4 高级编程>.<ASP.NET MVC 5 高级编程>.<C#高级编程(第8版)>.<使用ASP.NET MVC开发企业 ...
- Hibernate 系列 04 - Hibernate 配置相关的类
引导目录: Hibernate 系列教程 目录 前言: 通过上一篇的增删改查小练习之后,咱们大概已经掌握了Hibernate的基本用法. 我们发现,在调用Hibernate API的过程中,虽然Hib ...
- VMware的三种网络连接方式区别
关于VMware的三种网络连接方式,NAT,Bridged,Host-Only ,在刚接触的时候通常会遇到主机Ping不通虚拟机而虚拟机能Ping得通主机:主机与虚拟机互不相通等等网络问题.本文就这三 ...
- Ubuntu Server 设置PPTP客户端连接
安装PPTP客户端 apt-get install pptp-linux 设置连接账号信息 sudo vim /etc/ppp/chap-secrets 其中$login_name是登录名:$pass ...
- [No00008F]PLSQL自动登录,记住用户名密码&日常使用技巧
配置启动时的登录用户名和密码 这是个有争议的功能,因为记住密码会给带来数据安全的问题. 但假如是开发用的库,密码甚至可以和用户名相同,每次输入密码实在没什么意义,可以考虑让PLSQL Develope ...