1.集线器定义:
/// <summary>
/// 集线器定义
/// </summary>
public class EchoHub : Hub
{
private static int _count = 0;
/// <summary>
/// 连接创建成功
/// </summary>
/// <returns></returns>
public override async Task OnConnected()
{
Interlocked.Increment(ref _count);
//通知其他连接
await Clients.Others.Message("新连接创建:" + Context.ConnectionId + ",已连接数量:" + _count);
//通知当前连接
await Clients.Caller.Message("Hey,welcome!");
}
/// <summary>
/// 连接断开
/// </summary>
/// <param name="stopCalled"></param>
/// <returns></returns>
public override Task OnDisconnected(bool stopCalled)
{
Interlocked.Decrement(ref _count);
//通知所有连接
return Clients.All.Message(Context.ConnectionId + " 连接关闭,剩余连接数:" + _count);
}
/// <summary>
/// 广播消息
/// </summary>
public Task Broadcast(string message)
{
//通知所有连接
return Clients.All.Message(Context.ConnectionId + "> " + message);
}
}
2.注册集线器路由和配置
//注册集线器路由
app.MapSignalR("/realtime",new HubConfiguration() { });
3.客户端监听
<h1>Echo hub</h1>
<div>
<input type="text" id="text" />
<button id="send">Send</button>
</div>
@*与服务器端集线器
建立连接*@
<script src="/realtime/js"></script>
<script type="text/javascript">
$(function () {
//服务器端对应的集线器
var hub = $.connection.echoHub;
$.connection.loggint = true;
$.connection.url = '/realtime';
//客户端接收消息
hub.client.message = function (text) {
$("body").append(text + "<br />");
}
//启动连接成功
$.connection.hub.start().done(function () {
$('#send').click(function () {
var text = $('#text').val();
//调用服务器端,广播消息
hub.server.broadcast(text)
});
});
});
</script>