面试题答案
一键面试连接建立阶段
- 初始化连接:
- 使用
HubConnectionBuilder
类来创建HubConnection
实例。例如:
var connection = new HubConnectionBuilder() .WithUrl("yourHubUrl") .Build();
- 使用
- 注册事件:
- OnConnectedAsync:在客户端成功连接到Hub时,服务器端的Hub类中的
OnConnectedAsync
方法会被调用。可以在这个方法中进行一些连接相关的初始化操作,比如记录连接信息等。 - OnConnected:这是一个较旧版本的方法,与
OnConnectedAsync
类似,但返回类型是void
,而不是Task
。建议使用OnConnectedAsync
。 - 在客户端,可以注册
OnConnected
事件来处理连接成功后的逻辑,例如:
connection.OnConnected += () => { Console.WriteLine("Connected to the hub."); };
- OnConnectedAsync:在客户端成功连接到Hub时,服务器端的Hub类中的
- 启动连接:
- 在客户端调用
StartAsync
方法来启动连接,例如:
await connection.StartAsync();
- 在客户端调用
连接活动阶段
- 发送和接收消息:
- 客户端向服务器发送消息:调用HubConnection实例的
SendAsync
方法向服务器端的Hub发送消息。例如,如果Hub有一个SendMessage
方法,客户端可以这样调用:
await connection.SendAsync("SendMessage", "userName", "messageContent");
- 服务器端向客户端发送消息:在服务器端的Hub类中,使用
Clients
对象来向客户端发送消息。例如,要向所有连接的客户端发送消息,可以使用:
await Clients.All.SendAsync("ReceiveMessage", "userName", "messageContent");
- 客户端接收消息:在客户端通过
On
方法注册接收消息的处理逻辑。例如:
connection.On<string, string>("ReceiveMessage", (user, message) => { Console.WriteLine($"{user}: {message}"); });
- 客户端向服务器发送消息:调用HubConnection实例的
连接关闭阶段
- 服务器端关闭连接:
- OnDisconnectedAsync:当客户端断开连接时,服务器端Hub类中的
OnDisconnectedAsync
方法会被调用。可以在这个方法中进行清理操作,比如移除用户在线状态等。例如:
public override async Task OnDisconnectedAsync(Exception exception) { // 进行清理操作,如从在线用户列表中移除 await base.OnDisconnectedAsync(exception); }
- OnDisconnected:较旧版本的方法,与
OnDisconnectedAsync
类似,但返回类型是void
。建议使用OnDisconnectedAsync
。
- OnDisconnectedAsync:当客户端断开连接时,服务器端Hub类中的
- 客户端关闭连接:
- 调用HubConnection实例的
StopAsync
方法来主动关闭连接,例如:
await connection.StopAsync();
- 也可以注册
OnClosed
事件来处理连接关闭后的逻辑,例如:
connection.OnClosed += (error) => { Console.WriteLine($"Connection closed. Error: {error}"); return Task.CompletedTask; };
- 调用HubConnection实例的