我有signalR功能的多个JavaScript块。
我不知道执行的顺序,这样我想先从枢纽
$.connection.hub.start();
如果它尚未启动。
我怎么能检查集线器已经启动? 多次启动它,它会抛出一个错误。
我有signalR功能的多个JavaScript块。
我不知道执行的顺序,这样我想先从枢纽
$.connection.hub.start();
如果它尚未启动。
我怎么能检查集线器已经启动? 多次启动它,它会抛出一个错误。
有几种方法可以解决这个问题。 首先是要创建自己的连接状态跟踪变量,您与连接回调事件设置:
$.connection.hub.start().done(function() { ConnectionStarted = true; })
您可以尝试启动连接前检查ConnectionStarted。 不幸的是,这不会很好地工作,为的start()是异步的,这么多的情况下,可以尝试一个完成之前启动一个连接,并设置ConnectionStart为true。
所以,工作的解决方案。 那里有两个。 首先,有每个实例使用其自己的连接对象(即:不使用默认的$ .connection.hub,而是使用手动连接的创造者:
var localConnection = $.hubConnection();
var localHubProxy= localConnection.createHubProxy('HubNameHere');
这是不是很大,因为大多数浏览器都每页允许的连接数量有限,而且还因为它一般是矫枉过正。
国际海事组织,最好的解决办法是使用具有默认代理($ .connection.hub)单自动连接,并期待在连接状态(这是我刚刚碰到)。 每个连接对象都有一个状态:
$.signalR.connectionState
Object {connecting: 0, connected: 1, reconnecting: 2, disconnected: 4}
因此,在每一种情况下,去这样的事情?:
if ($.connection.hub && $.connection.hub.state === $.signalR.connectionState.disconnected) {
$.connection.hub.start()
}
还要注意的是,当你创建一个连接,它将在状态“断开连接” / 4,直到开始坐在叫做就可以了。 一旦开始被调用时,连接显然将尝试重新连接不断的(如果它被中断),直到$ .connection.hub.stop()被调用(会再回去状态“断开”)。
参考文献:
http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client#establishconnection https://github.com/SignalR/SignalR/wiki
当轮毂已经使用.done开始,你可以检测到()
$.connection.hub.start().done(function () {
});
使用这种方法,你可以做以下(从文档摘自: https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client-Hubs ),那么你可以跟踪如果连接是打开自己。
function connectionReady() {
alert("Done calling first hub serverside-function");
};
$.connection.hub.start()
.done(function() {
myHub.server.SomeFunction(SomeParam) //e.g. a login or init
.done(connectionReady);
})
.fail(function() {
alert("Could not Connect!");
});
您可以检查您的每一个功能,如连接状态:
function doSomething {
if ($.connection.hub.state === $.signalR.connectionState.disconnected) {
$.connection.hub.start().done(function () { myHub.server.myHubMethod(); });
}
else {
myHub.server.myHubMethod();
}
}