SignalR2.0开发实例之——群发消息
一、前言
http://blog.jobbole.com/82746/
二、干货实战开始
在vs2013开发环境
1.创建ASP.NET空Web应用程序项目
2.右击SignalRTest项目添加新项,选择SignalR集线器(v2),并命名集线器名字为TestHub.cs
然后项目自动生成了Scripts文件夹和文件,下面的jquery-1.10.2.js和jquery.signalR-2.0.0.js比较重要的两个js库
3.还要添加一个OWIN Startup类
4.修改TestStartup里面代码,注册管道虚拟地址,为的是前端添加一个引用需要用到的配置地址,现在透露一些信息吧。就是这个<script src="signalr/hubs"></script>。这个文件是运行动态生成的,我们新建项目是看不到的,按照配置好路径就对了!
using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;
[assembly: OwinStartup(typeof(SignalRTest.TestStartup))]
namespace SignalRTest
{
public class TestStartup
{
public void Configuration(IAppBuilder app)
{
// 有关如何配置应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=316888
//添加如下代码
//注册管道,使用默认的虚拟地址,根目录下的"/signalr",当然你也可以自己定义
app.MapSignalR();
}
}
}
5.在刚才新建的集线器里面就可以自己去写方法了,在方法体里可以通过 Clients.All.XXXXX 调用前端注册的js方法,实现了服务端调用客户端。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
namespace SignalRTest
{
//Hub的别名,方便前台调用
[HubName("testHHH")]
public class TestHub : Hub
{
/// <summary>
/// 自动生成的方法
/// </summary>
public void Hello()
{
Clients.All.hello();//意思是调用所有客户端的集线器注册的方法
}
/// <summary>
/// 自定义一个方法发送给所有的客户端
/// </summary>
/// <param name="msg"></param>
public void SendToAllClients(string msg)
{
Clients.All.allMessage(msg);//意思是调用所有客户端的集线器注册的方法allMessage
}
}
}
6.新建一个ChatTest.html 页面
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script src="Scripts/jquery-1.10.2.js"></script>
<script src="Scripts/jquery.signalR-2.0.0.js"></script>
<!--这里要注意,这是虚拟目录,也就是你在OWIN Startup中注册的地址-->
<script src="signalr/hubs"></script>
</head>
<body>
<div>
<div>姓名:<input type="text" name="name" id="name" /></div>
<div>
<ul id="ul">
<li>开始群聊咯。。。。。。。。。。。。。</li>
</ul>
<input type="text" name="content" id="content" /><input type="button" name="btn" id="btn" value="发送" />
</div>
</div>
<script type="text/javascript">
$(function () {
//1.声明一个代理引用集线器,如果集线器没有取别名,则要小写$.connection.testHub;如果有别名则直接写别名就好了
var chatClient = $.connection.testHHH;
//2.注册服务端调用客户端的方法,就是刚才在TestHub中调用的方法 Clients.All.allMessage(msg);
//注意是否有参数
chatClient.client.allMessage = function (msg) {
//动态加载内容到ul中
$("#ul").append($("<li>" + msg + "</li>"));
}
//3. 必须启动连接
$.connection.hub.start().done(function () {
$("#btn").click(function () {
if ($("#name").val().length > 0) {
var msg = $("#name").val() + "说:" + $("#content").val();
//4.客户端调用服务端方法,必须注意,很多时候自己掉坑了。。。调用服务端方法必须小写方法字母开头
chatClient.server.sendToAllClients(msg);
}
else {
alert("请输入名字");
}
});
});
});
</script>
</body>
</html>
7.运行结果
三、总结
服务端调用客户端js注册方法名字,名字大小写一致
客户端调用服务端方法,对应方法名字,客户端方的方法字母开头需小写
客户端声明一个代理引用集线器,如果集线器没有取别名,则要集线器类名字母开头小写$.connection.testHub;如果有别名则直接写别名就好了
客户端必须启动连接 $.connection.hub.start().done(function(){这里写调用服务端方法才能够起作用})
SignalR2.0开发实例之——群发消息的更多相关文章
- SignalR2.0开发实例之——设置时间、后台其他地方使用集线器、使用自己的连接ID
一.连接的生命周期设置: 如下: // 该值表示连接在超时之前保持打开状态的时间长度. //默认为110秒 GlobalHost.Configuration.ConnectionTimeout = T ...
- SignalR2.0开发实例之——私聊
一.前言 继续上一章的补充,这章介绍使用私聊的功能.主要通过一个方法 Clients.Client(Context.ConnectionId).showMessage(msg); SignalR框 ...
- SignalR2.0开发实例之——创建房间聊天
SignalR作为一个强大的集线器,已经在hub里面集成了Gorups,也就是分组管理,使用方法如下: //作用:将连接ID加入某个组 //Context.ConnectionId 连接ID,每个页面 ...
- SignalR2.0开发实例之——负载均衡
SignalR 2.0作为一个新的而且强大的通信工具,发布博客之后得到了很多人的支持,谢谢...也有人对性能和架设等问题提出了各种质疑..真的很感谢.. 我特意下载了SignalR 2.0的源码硬着头 ...
- springboot2.0+websocket集成【群发消息+单对单】(二)
https://blog.csdn.net/qq_21019419/article/details/82804921 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上 ...
- 一篇对OAuth2.0开发实例的介绍
今天看到了博友对SSO的文章,SSO单点登录的讲解突然想写一篇关于OAuth2.0用户授权的介绍. 应用场景:在APP或者网页接入一些第三方应用时,时长会需要用户登录另一个合作平台,比如QQ,微博,微 ...
- .net微信公众号开发——群发消息
作者:王先荣 本文将介绍微信公众号开发中用于群发消息的类MassMessage,包括:(1)MassMessage类:(2)群发:(3)删除:(4)预览:(5)查询发送状态:(6)接收推送群发结 ...
- 用SignalR 2.0开发客服系统[系列1:实现群发通讯]
前言 交流群:195866844 先说一下我为什么会写这个博客吧,(首先说一下,我是一个小菜鸟,讲的不好请指导 - -,) 前段时间公司的项目涉及到在B/S上使用即时通讯,(其实就是做一个B/S的客 ...
- 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(中)
接<基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)> 三.代码分析 1.界面初始化 bool PlaneWarGame::init() { bool bRet = fals ...
随机推荐
- C#进程与线程
public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { / ...
- 通俗理解angularjs中的$apply,$digest,$watch
<!DOCTYPE html> <html lang="zh-CN" ng-app="app"> <head> <me ...
- 高级 JsRender 模板功能
转自:http://msdn.microsoft.com/zh-cn/magazine/hh975379.aspx 尽管模板很强大,但有时模板引擎提供的现成标准功能无法满足您的需求. 您可能要转换数据 ...
- [Leetcode][019] Remove Nth Node From End of List (Java)
题目在这里: https://leetcode.com/problems/remove-nth-node-from-end-of-list/ [标签] Linked List; Two Pointer ...
- 莫队算法学习笔记【BZOJ2038:小Z的袜子】【SPOJ3267:D-query】
很久以前傻乎乎地看来源奇怪的资料的时候被各种曼哈顿弄晕了. 然后现在学会的是分块方法.另新创一个分块方法. 让我们考虑这样一个区间询问问题…… 它有如下的性质: 0,n个数,Q个询问. 1,它没有修改 ...
- iOS工程结构
好的架构不是设计出来的,而是进化而来的! 写在前面 从2011年底开始学习iOS开发,到现在也已经快3年了,虽然中途没有一直进行iOS的开发(总是在Android和iOS间切换),但始终没 ...
- 对拍 For Linux
#!/bin/sh g++ -g gene.cpp -o gene g++ -g a.cpp -o a g++ -g b.cpp -o b while true; do ./gene > in ...
- LeetCode_Best Time to Buy and Sell Stock III
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- java内存模型和线程
概述 多任务的处理在现在的计算机中可以说是"标配"了,在许多的情况下,让计算机同时做几件事情,不仅是因为计算机的运算能力的强大,还有一个重要的原因是:cpu的运算速度和计算机的存储 ...
- 手游与App测试如何快速转型? —— 过来人科普手游与App测试四大区别
随着智能设备的普及和移动互联网的兴起,各家互联网巨头纷纷在往移动端布局和转型,同时初创的移动互联网公司也都盯着这个市场希望分一杯羹.在这个大环境下,互联网的重心已经慢慢从Web端转向了移动端,而移动端 ...