【问题标题】:Setting state variables on the client side in SignalR在 SignalR 的客户端设置状态变量
【发布时间】:2013-04-05 08:22:58
【问题描述】:

我正在使用 javascript 库连接到托管在控制台应用程序中的 signalR 服务器。

因此,我连接并设置可以从服务器调用的客户端方法,如下所示:

var connection = $.hubConnection('http://localhost:8080'),
    proxy = connection.createHubProxy('TestApp');

proxy.on('sendMessage', function () {
    // do stuff!
});

详细描述here

但是,以这种方式使用客户端 javascript 的文档没有解释如何往返信息(在客户端设置“状态”变量并使其可从服务器访问)。

这可能很明显,但任何帮助将不胜感激!

此外,我认为有些事情与我很感兴趣。我知道客户端代码在调用服务器上的函数后可以获得返回值/回调(来自上面链接的文档)

proxy.invoke('add', 1, 2)
     .done(function(result) {
         console.log('The result is ' + result);
     });

但是当客户端完成任务时,服务器是否可以从客户端获取回调? (显然,只要让客户端触发预定义的事件就可以解决这个问题,但如果可能的话,处理所有回调而不需要设置另一个事件会很好。)

谢谢!!

【问题讨论】:

    标签: c# javascript jquery signalr


    【解决方案1】:

    1) 设置状态很简单:

    proxy.state.foo = 1337;
    

    那么你当然可以在服务器上通过

    int myFoo = Clients.Caller.foo;
    

    2) 不,当客户端功能完成执行时,您无法在服务器上收到通知。如果您想知道客户端功能何时完成,您只需自己回调服务器即可。

    例如:

    proxy.on('foo', function(){
        console.log("Foo executed");
        proxy.invoke("fooDone");
    });
    

    然后您需要在服务器上创建一个“fooDone”函数来处理回调。

    希望这会有所帮助!

    【讨论】:

    • 非常感谢您的回复。我实际上尝试在发布之前直接设置 proxy.state,但现在我想它可能已经失败,因为我试图在服务器集线器上的 onConnect 事件期间读取 Clients.Caller.foo。也许它只是不能从那个事件中调用?对我来说它可能失败的另一个可能原因是我在建立连接之前在客户端上设置了状态(在开始连接之前我设置 proxy.on(...) 的位置相同)?
    • 设置状态无关紧要,但您只能读取服务器上方法调用的状态。因此,是的,您是正确的,您无法读取 OnConnected、OnDisconnected、OnReconnected 中的状态
    猜你喜欢
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 2022-12-14
    • 1970-01-01
    • 2020-12-31
    • 2019-06-18
    相关资源
    最近更新 更多