面试题答案
一键面试-
SignalR:
- 基本原理:SignalR 是一个开源库,用于 ASP.NET 应用程序中实现实时双向通信。它支持多种传输方式,如 WebSockets、Server-Sent Events 和长轮询等。根据客户端和服务器的支持情况,SignalR 会自动选择最合适的传输方式。WebSockets 是一种在单个 TCP 连接上进行全双工通信的协议,能使服务器主动向客户端推送数据;Server-Sent Events 允许服务器向 Web 浏览器发送实时更新;长轮询则是客户端发起一个到服务器的 HTTP 请求,服务器保持连接打开,直到有数据可发送或连接超时,然后客户端重新发起请求,以此模拟实时通信。
-
Socket.IO:
- 基本原理:虽然 Socket.IO 严格来说不是 C# 特有的框架,但 C# 可以通过相关的库与之集成。Socket.IO 实现实时通信也是基于 WebSockets 等技术。它在 WebSockets 之上添加了额外的功能,如自动重连、心跳检测等,以确保在各种网络环境下都能稳定地进行实时通信。它同样支持多种传输方式,会自动根据客户端浏览器和网络状况选择最佳传输,如 WebSockets 不可用时自动切换到长轮询等。
-
System.Net.Sockets:
- 基本原理:这是.NET Framework 中用于网络通信的基础类库。它基于 TCP 或 UDP 协议实现通信。对于实时通信,如果使用 TCP,它会在客户端和服务器之间建立一个可靠的连接,通过这个连接双方可以随时发送和接收数据。服务器端创建一个 Socket 实例并绑定到特定的 IP 地址和端口,开始监听传入的连接请求。客户端创建 Socket 实例并连接到服务器指定的地址和端口。一旦连接建立,双方就可以通过 Send 和 Receive 方法进行数据传输,从而实现实时通信。UDP 则是无连接的协议,适用于对实时性要求高但对数据准确性要求相对较低的场景,如实时视频流、音频流等,通过向特定的 IP 地址和端口发送数据包来传输数据。