因此,您的问题在于,您在向集线器代理注册任何客户端方法之前就开始了连接。
有两种方法可以解决这个问题。
-
在$.connection.hub.start之前的init中,调用_subscribe方法。
-
请确保在启动之前至少定义了一个客户端方法(需要“订阅”传入消息)。在启动后使用.on订阅集线器方法。
这是代码中的两种方法。
1:
var rtcom = new RealtimeConnection();
rtcom.init({debug: true});
RealtimeConnection: function () {
var
_rtHub = $.connection.realtimeConnectionHub,
_initialized = false,
_init = function (options, cb) {
options = options || {};
$.connection.hub.logging = options.debug;
_rtHub.client.onBroadcastMessage = function() {
alert("message");
};
$.connection.hub.start().done(function () {
_initialized = true;
if (cb) { cb(); }
});
},
_broadcast = function (message) {
if (_initialized) {
_rtHub.server.broadcastMessage("testuser", message);
}
},
return {
initialized: _initialized,
broadcast: _broadcast,
init: _init
};
}
$("#container").on("click", "button.chat-btnSendMessage", function () {
rtcom.broadcast($(this).parent().find("input").val());
});
2:
var rtcom = new RealtimeConnection();
rtcom.init({debug: true}, function () {
rtcom.subscribe(function (sender, message) {
if (message) {
alert("message");
}
});
});
RealtimeConnection: function () {
var
_rtHub = $.connection.realtimeConnectionHub,
_initialized = false,
_init = function (options, cb) {
options = options || {};
// Need to have at least 1 function registered to be subscribed to hub
_rtHub.client.foo = function() {};
$.connection.hub.logging = options.debug;
$.connection.hub.start().done(function () {
_initialized = true;
if (cb) { cb(); }
});
},
_broadcast = function (message) {
if (_initialized) {
_rtHub.server.broadcastMessage("testuser", message);
}
},
_subscribe = function (cb) {
if (_initialized) {
_rtHub.on("onBroadcastMessage", cb);
}
};
return {
initialized: _initialized,
broadcast: _broadcast,
subscribe: _subscribe,
init: _init
};
}
$("#container").on("click", "button.chat-btnSendMessage", function () {
rtcom.broadcast($(this).parent().find("input").val());
});