Signalr 如何使用Signal制作服务器时间应用程序

Signalr 如何使用Signal制作服务器时间应用程序,signalr,Signalr,我在靠信号机。如何编写一个简单的应用程序,以便用户可以使用Hub实时查看服务器时间。每1秒,服务器会将时间从服务器发送到连接的客户端您可以在使用线程时执行此操作 集线器类示例: public class ServerTime : Hub { public void Start() { Thread thread = new Thread(Write); thread.Start(); } public void Write()

我在靠信号机。如何编写一个简单的应用程序,以便用户可以使用Hub实时查看服务器时间。每1秒,服务器会将时间从服务器发送到连接的客户端

您可以在使用线程时执行此操作

集线器类示例:

public class ServerTime : Hub
{
    public void Start()
    {
        Thread thread = new Thread(Write);
        thread.Start();
    }

    public void Write()
    {
        while (true)
        {
            Clients.settime(DateTime.Now.ToString());
            Thread.Sleep(1000);
        }
    }
}
示例脚本:

<script type="text/javascript">
    $(document).ready(function () {
        var time = $.connection.serverTime;
        $("#btnTest").click(function () {
            time.start();
        });

        time.settime = function (t) {
            $("#Time").html(t);
        };
        $.connection.hub.start();
    });
</script>
<div id="Time"></div>
<input id="btnTest" type="button" value="Test"/>

$(文档).ready(函数(){
var time=$.connection.serverTime;
$(“#btnTest”)。单击(函数(){
time.start();
});
time.settime=函数(t){
$(“#Time”).html(t);
};
$.connection.hub.start();
});
当您单击btnTest时,线程将开始工作。
线程每秒钟向页面发送一条消息。

您可以在使用线程时执行此操作

集线器类示例:

public class ServerTime : Hub
{
    public void Start()
    {
        Thread thread = new Thread(Write);
        thread.Start();
    }

    public void Write()
    {
        while (true)
        {
            Clients.settime(DateTime.Now.ToString());
            Thread.Sleep(1000);
        }
    }
}
示例脚本:

<script type="text/javascript">
    $(document).ready(function () {
        var time = $.connection.serverTime;
        $("#btnTest").click(function () {
            time.start();
        });

        time.settime = function (t) {
            $("#Time").html(t);
        };
        $.connection.hub.start();
    });
</script>
<div id="Time"></div>
<input id="btnTest" type="button" value="Test"/>

$(文档).ready(函数(){
var time=$.connection.serverTime;
$(“#btnTest”)。单击(函数(){
time.start();
});
time.settime=函数(t){
$(“#Time”).html(t);
};
$.connection.hub.start();
});
当您单击btnTest时,线程将开始工作。
线程每秒钟向页面发送一条消息。

创建一个侦听器并在添加通知时引发一个事件:)这样您就不必连续检查数据库:)

创建一个侦听器并在添加通知时引发一个事件:)这样您就不必在
应用程序\u启动(对象发送方,事件参数)
方法创建一个后台线程并启动它。在该线程中,您需要执行以下操作才能访问中心:

IConnectionManager connectionManager = AspNetHost.DependencyResolver
                                         .Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<ServerTime>();
clients.settime(DateTime.UtcNow.ToString());
IConnectionManager连接管理器=AspNetHost.DependencyResolver
.Resolve();
动态客户端=connectionManager.GetClients();
clients.settime(DateTime.UtcNow.ToString());

NB
DateTime.UtcNow
几乎总是首选,因为它不会一年跳两次。

在Global.asax中的
应用程序启动(objectsender,EventArgs e)
方法创建一个后台线程并启动它。在该线程中,您需要执行以下操作才能访问中心:

IConnectionManager connectionManager = AspNetHost.DependencyResolver
                                         .Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<ServerTime>();
clients.settime(DateTime.UtcNow.ToString());
IConnectionManager连接管理器=AspNetHost.DependencyResolver
.Resolve();
动态客户端=connectionManager.GetClients();
clients.settime(DateTime.UtcNow.ToString());

NB
DateTime.UtcNow
几乎总是首选,因为它不会一年跳两次。

您有什么具体问题吗?你写了什么吗?你有什么特别的问题吗?你写了什么吗?如果另一个用户访问这个页面会发生什么?那么那时候我们有两个线程开始?你不需要启动两个线程。因为它将在线程第一次启动时向所有连接的用户发送ServerTime。只启动一次线程就足够了。我对信号器也是新手。我用上面的代码尝试了您的示例,但我一直得到以下错误:“信号器:必须先启动连接,然后才能发送数据。Call.start()before.send()”;我的推荐信都是正确的。我被难住了@正如vNext所指出的,sinanakyazici由于将启动多个线程,因此该代码将不能对多个客户端正常工作。您认为signar将向所有连接的客户端发送消息是正确的,但这不会阻止每次新客户端连接时执行服务器端线程启动代码。那么,如果其他用户访问此页面,会发生什么情况?那么那时候我们有两个线程开始?你不需要启动两个线程。因为它将在线程第一次启动时向所有连接的用户发送ServerTime。只启动一次线程就足够了。我对信号器也是新手。我用上面的代码尝试了您的示例,但我一直得到以下错误:“信号器:必须先启动连接,然后才能发送数据。Call.start()before.send()”;我的推荐信都是正确的。我被难住了@正如vNext所指出的,sinanakyazici由于将启动多个线程,因此该代码将不能对多个客户端正常工作。signar将向所有连接的客户端发送消息是正确的,但这不会阻止每次连接新客户端时执行服务器端线程启动代码。