2013-04-12 41 views
1

我正在使用JavaScript库连接到托管在控制台应用程序中的signalR服务器。在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); 
    }); 

但有可能使服务器从客户端得到一个回调当客户完成任务? (很明显,只要客户端触发预定义的事件就可以解决这个问题,但如果可能,无需设置其他事件就可以处理所有回调。)

Thanks!

回答

3

1) 有关设置状态很简单:

proxy.state.foo = 1337; 

那么你当然可以通过

int myFoo = Clients.Caller.foo; 

2) 没有你得到这个服务器上当客户端功能完成执行时,无法在服务器上通知。如果你想知道什么时候客户端功能已经完成,你可以简单地自己回调服务器。

例如:

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

那么你需要在服务器上创建一个“fooDone”函数来处理回调。

希望这会有所帮助!

+0

非常感谢您的回复。实际上,我在发布之前直接尝试设置了proxy.state,但现在我想到了,它可能失败了,因为我试图在服务器集线器上的onConnect事件期间读取Clients.Caller.foo。也许它只是不能从这个事件中调用?它可能失败的另一个可能的原因是,我在连接建立之前在客户端上设置了状态(在开始连接之前,我在其中设置了proxy.on(...)的相同位置)? –

+0

设置状态时无关紧要,但只能读取服务器上方法调用的状态。因此,是的,你是正确的,你无法读OnConnected,OnDisconnected,OnReconnected状态 –

+0

很高兴知道,再次感谢! –