1.路由配置
//注册集线器路由
app.MapSignalR("/realtime", new HubConfiguration() { });
2.服务端处理
/// <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);
}
/// <summary>
/// 获取当前在线用户的连接ID
/// </summary>
/// <returns></returns>
public string GetCurrentID()
{
return Context.ConnectionId;
}
/// <summary>
/// 获取当前请求的cookie列表
/// </summary>
/// <returns></returns>
public object GetCurrentCookie()
{
return Context.RequestCookies.ToArray();
}
/// <summary>
/// 获取所有在的连接
/// </summary>
/// <returns></returns>
public object GetAllID()
{
// GlobalHost.ConnectionManager.GetHubContext<>();
return Clients.All;
}
}
3.客户端处理
<h1>Echo hub</h1>
<div>
<input type="text" id="text" />
<button id="send">Send</button>
<button id="GetCurrentID">获取当前在线用户的ID</button>
<button id="GetAllID">获取所有在线用户的ID</button>
<button id="GetCookies">获取当前请求的cookie</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)
});
//获取在线用户的ID
$('#GetCurrentID').click(function () {
var deferred = hub.server.getCurrentID();
deferred.done(function (data) {
console.info(data);
alert(data);
});
});
//获取所有用户在线ID,失败
$('#GetAllID').click(function () {
var deferred = hub.server.getAllID();
deferred.done(function (data) {
alert(data);
console.info(data);
});
deferred.fail(function (err) {
console.info(err)
alert(err.message);
});
});
//获取当前请求的cookie
$('#GetCookies').click(function () {
var deferred = hub.server.getCurrentCookie();
deferred.done(function (data) {
console.info(data);
console.info(JSON.stringify(data));
alert(data);
}).fail(function (err) {
console.info(err);
alert(err.message);
});
});
});
});
</script>
获取当前连接的ID
获取当前连接上下文中的cookie
获取所有在线连接的ID失败