单击Signalr时停止单个客户端的连接

时间:2014-12-15 08:31:34

标签: .net signalr chat

如何通过点击按钮断开特定客户端的连接?单击按钮删除时,我想断开特定客户端与聊天的连接。我做chatHub.connection.stop();但它只能在一个客户端上运行,而不是在每个客户端上运行!

提前完成

1 个答案:

答案 0 :(得分:2)

chatHub.connection.stop()是断开客户端连接的方法。

如果要通过来自一个客户端的消息断开所有客户端,则必须从服务器执行此操作。

使用当前版本(SignalR 2.0),您将如何操作。

  1. 客户端向服务器发送消息(例如disconnectAllClients
  2. 服务器向所有客户端发送消息以断开连接。
  3. 每位客户都致电chatHub.connection.stop()
  4. 这是因为

    1. 单个客户端不能断开其他客户端(想象一个流氓客户端将此作为DoS或DDoS攻击)

    2. SignalR v2.0此时没有服务器端API来删除连接。所以客户端应该断开连接。

    3. Source from asp.net site

      <强>引用:

        

      SignalR版本2没有用于断开客户端连接的内置服务器API。有计划在将来添加此功能。在当前的SignalR版本中,断开客户端与服务器的最简单方法是在客户端上实现disconnect方法并从服务器调用该方法。以下代码示例显示了使用生成的代理的JavaScript客户端的断开连接方法。

      来自安全说明:

        

      这种断开客户端的方法和建议的内置API都不能解决运行恶意代码的黑客客户端的情况,因为客户端可能会重新连接,或者被黑客入侵的代码可能会删除stopClient方法或更改它的功能。实现有状态拒绝服务(DOS)保护的适当位置不在框架或服务器层中,而是在前端基础结构中。