实例说明:
Microsoft.AspNet.SignalR.SelfHost-------用于创建自托管服务器端
Microsoft.AspNet.SignalR.JS----------------用于创建Web浏览器客户端
Microsoft.AspNet.SignalR.Client------------用于创建.Net Client 例如控制台、Wpf等
//服务器端
Install-Package Microsoft.AspNet.SignalR.SelfHost
Install-Package Microsoft.Owin.Cors
//客户端
Install-Package Microsoft.AspNet.SignalR.Client
Install-Package Microsoft.AspNet.SignalR.JS
SignalR常常依托于ASP.NET应用程序运行于IIS中,但它还可以自我托管(比如作为console winform、Windows service).只要我们使用self-host库就可以了.
该库向所有的SignalR 2库一样,构建于OWIN (Open Web Interface for .NET).OWIN定义了一个在.NET web 服务端和web 应用程序的抽象.
OWIN解耦了从服务端来的web 应用程序,这使得OWIN对于子托管web应用程序于自己的进程中得以表现得很完美.
下载源代码:http://git.oschina.net/tiama3798/SingleR_Demo/tree/SelfHost/
一、创建服务器端,以控制台为例
1.新建控制台项目
2.添加引用类库,SignalR.SelfHost(宿主类库)和Owin.Cors(跨域控制)
Nuget命令:
Install-Package Microsoft.AspNet.SignalR.SelfHost
Install-Package Microsoft.Owin.Cors
3.创建服务器端实例代码:
添加OwinStart
[assembly: OwinStartup(typeof(SingnalROne.Startup1))]
namespace SingnalROne
{
public class Startup1
{
public void Configuration(IAppBuilder app)
{
//跨域设置
app.UseCors(CorsOptions.AllowAll);
//路由注册(使用默认)
app.MapSignalR();
}
}
}
自定义集线器
public class MsgHub : Hub
{
/// <summary>
/// 向所有客户端发送消息或转发消息
/// </summary>
/// <param name="content"></param>
public void Send(string content)
{
Console.WriteLine("服务器中转内容:" + content);
//通知所有客户端
Clients.All.receive(content);
}
}
Main方法中注册端口监听
class Program
{
static void Main(string[] args)
{
//创建服务器监听
string url = "http://localhost:8000";
using (WebApp.Start(url))
{
Console.WriteLine("Server runing on {0}", url);
Console.Read();
}
}
}
二、创建.net Client,控制台客户端
1.新建控制台项目
2.添加引用类库 SingalR.Client
Install-Package Microsoft.AspNet.SignalR.Client
3.mian方法中注册客户端连接并开启监听等待
class Program
{
//SignalR.Client简单实例
static void Main(string[] args)
{
//创建客户端连接
string url = "http://localhost:8000";
var con = new HubConnection(url);
//实例化客户端代理
IHubProxy msgProxy = con.CreateHubProxy("MsgHub");
//注册客户端接收
msgProxy.On("receive", (content) =>
{
Console.WriteLine("服务器推送内容:" + content);
});
//启动监听并等待
con.Start().Wait();
//客户端,发送内容
msgProxy.Invoke("Send", "ConsonleClient,上线了");
Console.WriteLine("ConsonleClient,启动成功");
Console.Read();
}
}
注:更多SingleR.Client配置请参考:
http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-net-client
三、创建Web浏览器客户端
1.新建Web空项目
2.添加引用类库 SingalR.JS
Install-Package Microsoft.AspNet.SignalR.JS
3.创建msghub1.html页面实例
主要代码html
<input type="text" id="txtOne" />
<input type="button" id="btnOne" value="发送内容" />
<p id="result"></p>
<!--依赖文件-->
<script src="../Scripts/jquery-1.6.4.min.js"></script>
<script src="../Scripts/jquery.signalR-2.2.1.min.js"></script>
<!--加载hub客户端js代理 -->
<script src="http://localhost:8000/signalr/hubs"></script>
js代码:
//创建 MsgHub js实例
$.connection.hub.url = "http://localhost:8000/signalr";
var msgHub = $.connection.msgHub;
//启用客户端日志
$.connection.hub.logging = true;
//注册客户端接收事件处理
msgHub.client.receive = function (content) {
console.info(content);
$('#result').append('服务器推送内容:'+content).append('<br />');
}
//启动监听
$.connection.hub.start().done(function () {
//调用服务端发送消息
$('#btnOne').click(function () {
var text = $('#txtOne').val();
msgHub.server.send(text);
});
});
运行结果:
更多自托管demo:http://www.asp.net/signalr/overview/deployment/tutorial-signalr-self-host