我正在测试SignalR (通过nuget测试0.4.0),无法找到任何方法让服务器强行断开客户端连接。我想我漏掉了一些明显的东西。
我的测试代码如下所示,我几乎在我能想到的每一个地方和组合中都尝试了Close()和Timeout(),但都没有成功。客户端继续接收脉冲消息,尽管我总是在最初的4-5秒内获得两个重新连接,这些连接似乎来自于return Connection.Close() in OnReceivedAsync()。
服务器:
internal class SignalRServer
{
private Server server;
public SignalRServer()
{
server = new Server("http://localhost:13170/");
server.MapConnection<EchoConnection>("/echo");
server.Start();
Timer timer = new Timer(1000);
timer.Elapsed += OnTimer;
timer.Enabled = true;
}
void OnTimer(object sender, ElapsedEventArgs e)
{
IConnectionManager manager = server.DependencyResolver.GetService(typeof(IConnectionManager)) as IConnectionManager;
IConnection connection = manager.GetConnection<EchoConnection>();
connection.Broadcast("pulse");
connection.Close();
connection.Timeout();
}
}
internal class EchoConnection : PersistentConnection
{
protected override Task OnConnectedAsync(IRequest request, IEnumerable<string> groups, string connectionId)
{
Connection.Timeout();
Connection.Close();
return Connection.Broadcast(String.Format("{0} connection", connectionId));
}
protected override Task OnReconnectedAsync(IRequest request, IEnumerable<string> groups, string connectionId)
{
return Connection.Broadcast(String.Format("{0} reconnection", connectionId));
}
protected override Task OnReceivedAsync(string connectionId, string data)
{
Console.WriteLine(data);
Connection.Close();
Connection.Timeout();
Connection.Broadcast(data);
return Connection.Close();
}
}客户端:
internal class SignalRClient
{
private readonly Connection connection;
public SignalRClient()
{
connection = new Connection("http://localhost:13170/echo");
connection.Received += OnReceive;
connection.Closed += OnClosed;
connection
.Start()
.ContinueWith(t =>
{
if (!t.IsFaulted)
connection.Send("Hello");
else
Console.WriteLine(t.Exception);
});
Console.WriteLine(connection.ConnectionId);
}
void OnClosed()
{
// never called
connection.Stop();
}
void OnReceive(string data)
{
Console.WriteLine(data);
}
}示例客户端输出:
d7615b15-f80c-4bc5-b37b-223 ef96fe96c连接
你好
脉搏
脉搏
d7615b15-f80c-4bc5-b37b-223ef96fe96c重连接
脉搏
脉搏
d7615b15-f80c-4bc5-b37b-223ef96fe96c重连接
脉搏
脉搏
脉搏
脉搏
脉搏
脉搏
.
发布于 2012-02-21 23:48:07
向客户端发送特定字符串以强制断开连接:
void OnReceive(string data)
{
if(data.Equals("exit"))
{
connection.Stop();
return;
}
Console.WriteLine(data);
}发布于 2021-02-10 15:21:57
在.Net核心使用中
Context.Abort();https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.signalr.hubcallercontext.abort
https://stackoverflow.com/questions/9382111
复制相似问题