SignalR如何停止和启动"服务器"

时间:2016-10-18 04:03:43

标签: c# asp.net asp.net-mvc signalr signalr-hub

如果之前已经回答过,或者是一个愚蠢的问题,我道歉。

我有一个Web应用程序(.NET MVC c#),它可以执行许多不同的功能。我想添加一个可以使用websockets的新功能

我已经查看了SignalR,它在使用场景时看起来很好,但是我不希望它一直处于活动状态。

它只会在一段时间内处于活动状态,管理员将允许该功能"。

想象一个商业网络应用程序也有聊天选项,但只有在午休时才允许聊天选项。

我不希望SignalR在后台运行90%的时间不会被使用,所以如何停止它或创建Hub的新实例?

**编辑**

按照下面的答案(我很感激),我不认为我提出了明确的问题。

我不确定集线器"服务器"开始和停止。使用Visual Studio中的抽象(即只添加一个SignalR类),我无法解决如何处理Hub然后重新启动它(创建它的实例)

2 个答案:

答案 0 :(得分:2)

你可以使用setTimeout JavaScript函数,在页面加载时,获取当前时间,计算午休前的差异,并为其启动另一个启动集线器的函数。

实施例

<script>
$(function(){
 var currentTime = new Date();
 var lunchTime =  ....
 var timeRemaining = ...
 var lunchEndTime = ...

 setTimeout(startHubConnection(),timeRemaining);
 setTimeout(stopHubConnection(),lunchEndTime );

});

function startHubConnection(){
  $.connection.hub.start().done(function () {
   //do whatever neccessary here

 }); 

function stopHubConnection(){
    $.connection.hub.stop();   
}
</script>

在服务器端,如果时间不在允许的休息时间内,请在集线器中进行额外的检查

Clients.Client(Context.ConnectionId).serverOrderedDisconnect();

答案 1 :(得分:0)

您将以停止WebAPI服务器,WCF服务器或在Web服务器上运行的任何Web应用程序的相同方式停止中心“服务器”;在服务器上禁用它。

通过Visual Studio的抽象,它仍在IIS Express下运行-如果停止运行signalR集线器“服务器”,则将浏览器指向localhost:12345 / signalr / hubs时,页面将显示一些内容遵循“无法访问此站点”的字样。

但是您为什么要停止中心“服务器”?最好让它运行...并在您的午餐时间限制服务器端使用。