一、本文出处:SignalR 实例介绍 (建议看原著里面有DEMO下载)
二、这篇文章介绍如何利用 VS2012 创建一个简单的实时聊天系统,建好后的样子如下(模拟三个在线用户):
三、Demo 创建
1、新建项目以及新建完成后的目录结构如下图所示:
2、 安装 SignalR 程序包,该包实现了服务端与客户端的通信。
工具----> NuGet 程序包管理器----> 程序包管理器控制台 执行命令行:install-package Microsoft.AspNet.SignalR
安卓成功后的目录结构如下图所示,红色框内为新增加的文件:
3、添加类用于接收客户端的信息以及广播收到的信息,该类的名字命名为: ChatHub.cs,该类继承自 Hub 类,并在该类中添加如下代码:
public class ChatHub : Hub { public void Send(string name, string message) { // Call the broadcastMessage method to update clients. Clients.All.broadcastMessage(name, message); } }
4、添加启动类用于配置路由,该类的名字命名为:Startup.cs,并在该类中添加如下代码:
using Microsoft.Owin; using Owin; using System; using System.Collections.Generic; using System.Linq; using System.Web; [assembly: OwinStartup(typeof(WebTM.Startup))] namespace WebTM { public class Startup { public void Configuration(IAppBuilder app) { // Any connection or hub wire up and configuration should go here app.MapSignalR(); } } }
5、添加HTML页面用于发送以及接受消息,该HTML页面的名字命名为:WebChat.Html ,代码如下:
HTML:
用户名:<strong><label id="displayname"></label></strong> <div class="container"> <input type="text" id="message" /> <input type="button" id="sendmessage" value="Send" /> <ul id="discussion" style="list-style:none;"> </ul> </div>
样式:
.container {
background-color: #99CCFF;
border: thick solid #808080;
padding: 20px;
margin: 20px;
}
脚本:
<script src="Scripts/jquery-1.6.4.min.js"></script> <script src="Scripts/jquery.signalR-2.2.0.min.js"></script> <script src="Signalr/hubs"></script> <script type="text/javascript"> $(function () { var chat = $.connection.chatHub; chat.client.broadcastMessage = function (name, message) { var encodedName = $('<div />').text(name).html(); var encodedMsg = $('<div />').text(message).html(); $('#discussion').append('<li><strong>' + encodedName + '</strong>: ' + encodedMsg + '</li>'); }; $('#displayname').text(prompt('输入您的名字:', '')); if ($('#displayname').text() === "") $('#displayname').text(new Date().getTime()); $('#message').focus(); $.connection.hub.start().done(function () { $('#sendmessage').click(function () { // Call the Send method on the hub. chat.server.send($('#displayname').text(), $('#message').val()); // Clear text box and reset focus for next comment. $('#message').val('').focus(); }); }); }); </script>
在 JS 脚本中,有三个需要注意的地方(上方代码加红加粗处):
- 第一个加红加粗处的JS脚本为自动生成的脚本,千万不可忘记添加,另外名字也不可以随便更改。而且必须在 Jquery 与 Signalr 脚本之后。
- 第二个加红加粗处是初始化连接交换类 ChatHub ,但是此处要小写。
- 第二个加红加粗处是调用交换类的公共方法 Send,该方法名也要小写。
第一个加红加粗的JS脚本是在系统启动后,Signalr脚本调用执行 Startup 类下的配置方法而生成的。
另外可以在类 ChatHub 加属性如下:
这样可以在第二个加红加粗处使用:ChatHub,在第三个加红加粗处使用 Send。
6、运行该HTML页面,复制到不同标签页,模拟多个用户在线聊天。