如何在没有客户请求的情况下在signalR中向客户端发送消息

时间:2016-12-26 11:47:19

标签: c# asp.net-mvc signalr

我们都知道signalR使用开放式连接与客户进行通信。 我想知道如何在没有任何请求的情况下向客户发送消息。例如,在每个时间量或任何事件服务器将数据传递给客户端。

2 个答案:

答案 0 :(得分:1)

使用this answer并在服务器端运行后台任务。

不在集线器内部,因为它们的生命周期是按请求进行的。

答案 1 :(得分:0)

我认为您需要向所有用户广播。以下示例显示了向所有客户广播按摩的基本代码。每次拨打SendNotifications(" massage")时,所有用户都会接受按摩。

 public class EmployeeHub : Hub
{

    public void SendNotifications(string message)
{
    Clients.All.receiveNotification(message);
} 
}

和网页:

    <body>
<input id="text1" type="text" />
<input id="button1" type="button" value="Send" />
<ul id="discussion">
</ul>
<!--Reference the jQuery library. -->
<script src="Scripts/jquery-1.6.4.min.js" type="text/javascript"></script>
<!--Reference the SignalR library. -->
<script src="Scripts/jquery.signalR-1.1.3.js" type="text/javascript"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="signalr/hubs"></script>
<script type="text/javascript">
    $(function () {
        // Declare a proxy to reference the hub.
        var notifications = $.connection.employeeHub;
        // Create a function that the hub can call to broadcast messages.
        notifications.client.receiveNotification = function (message) {
            // alert(" says '" + message + "'");
            // Html encode display name and message.                
            var encodedMsg = $('<div />').text(message).html();
            // Add the message to the page.
            $('#discussion').append('<li>' + encodedMsg + '</li>');
        };
        // Start the connection.
        $.connection.hub.start().done(function () {

        });
    });
</script>