数码资讯
Hub
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
public class StreamHub : Hub { public ChannelReader<string> ReadLogStream() { var channel = Channel.CreateUnbounded<string>(); _ = WriteFileLine(channel.Writer); return channel.Reader; } private async Task WriteFileLine(ChannelWriter<string> writer) { using (var streamReader = new StreamReader(Directory.GetCurrentDirectory() + "/logs/server.log")) { string line; while ((line = streamReader.ReadLine()) != null) { await writer.WriteAsync(line); await Task.Delay(TimeSpan.FromSeconds(2)); } writer.TryComplete(); } } }
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace SignalRCharSample.Hubs
{
[Authorize]
public class UserChatHub: Hub
{
public async Task SendMessage(string toUserName, string message)
{
await Clients.User(toUserName).SendAsync("ReceiveMessage", $"{DateTime.Now}--{Context.UserIdentifier}--{message}");
}
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<div>
UserName:<input type="text" id="userInput" />
Message:<input type="text" id="messageInput" />
<input type="button" id="sendButton" value="Send" />
</div>
<ul id="messagesList"></ul>
<script src="https://localhost:57634/lib/jquery/dist/jquery.js"></script>
<script src="https://localhost:57634/lib/signalr.min.js"></script>
<script>
var connection = new signalR.HubConnectionBuilder().withUrl("https://localhost:57634/chatHub").build();
connection.on("ReceiveMessage", function (user, message) {
var msg = user + " says " + message;
var li = document.createElement("li");
li.textContent = msg;
document.getElementById("messagesList").appendChild(li);
});
connection.start().catch(function (err) {
return console.error(err.toString());
});
document.getElementById("sendButton").addEventListener("click", function (event) {
var user = document.getElementById("userInput").value;
var message = document.getElementById("messageInput").value;
connection.invoke("SendMessage", user, message).catch(function (err) {
return console.error(err.toString());
});
event.preventDefault();
});
</script>
</body>
</html>
using Microsoft.AspNetCore.SignalR; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace SignalRCharSample.Hubs { public class ChatHub : Hub { public async Task SendMessage(string user, string message) { await Clients.All.SendAsync("ReceiveMessage", user, DateTime.Now + "--" + message); } public Task SendMessageToCaller(string message) { return Clients.Caller.SendAsync("ReceiveMessage",message); } public Task SendMessageToGroups(string message) { List<string> groups = new List<string>() { "Group1","Group2" }; return Clients.Groups(groups).SendAsync("ReceiveMessage", message); } public override async Task OnConnectedAsync() { await Groups.AddToGroupAsync(Context.ConnectionId, "Group1"); await base.OnConnectedAsync(); } public override async Task OnDisconnectedAsync(Exception exception) { await Groups.RemoveFromGroupAsync(Context.ConnectionId, "Group1"); await base.OnDisconnectedAsync(exception); } } }
using Microsoft.AspNetCore.SignalR; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace SignalRCharSample.Hubs { public class CustomUserIdProvider : IUserIdProvider { public string GetUserId(HubConnectionContext connection) { //return connection.GetHttpContext().Request.Query["userid"]; return connection.User?.FindFirst("UserName")?.Value; } } }
using Microsoft.AspNetCore.SignalR; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace SignalRCharSample.Hubs { public class GroupChatHub: Hub { public async Task AddToGroup(string groupName) { await Groups.AddToGroupAsync(Context.ConnectionId, groupName); await Clients.Group(groupName).SendAsync("Send", $"{Context.ConnectionId} has joined the group {groupName}."); } public async Task RemoveFromGroup(string groupName) { await Groups.RemoveFromGroupAsync(Context.ConnectionId, groupName); await Clients.Group(groupName).SendAsync("Send", $"{Context.ConnectionId} has left the group {groupName}."); } public Task SendMessageToGroup(string groupName, string message) { return Clients.Group(groupName).SendAsync("Send", $"{Context.ConnectionId}: {message}"); } public override Task OnConnectedAsync() { return base.OnConnectedAsync(); } } }
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。