gpt4 book ai didi

javascript - SignalR 更改中心订阅

转载 作者:行者123 更新时间:2023-11-28 05:46:03 24 4
gpt4 key购买 nike

我有一个简单的应用程序,它显示可用的 signalR 集线器列表。用户选择一个集线器并连接到它,这会订阅一个事件以将消息添加到页面上的表中。然后,用户可以将消息发送到该中心,这也将触发订阅,将该消息添加到表中。这一切都很好。

现在,如果用户选择另一个中心,应用程序会连接并设置新的订阅,但是原始订阅仍然会触发,导致重复的消息添加到表中。每次更改集线器时,都会添加更多订阅,导致一次发送会在表中产生许多消息。

我尝试断开集线器的连接,处置集线器并尝试使用 hubProxy.off(eventName) 删除订阅,但除了页面重新加载之外,似乎没有任何效果。

这是我刚刚添加的 onHub 更改函数的代码,因为这就是一切发生的地方。

任何想法表示赞赏。 :)

function HubViewModel() {
var self = this;
self.hubConnection = '';
self.hub = '';

$.getScript("../signalR/hubs");

self.hubs = ko.observableArray();
self.selectedHub = ko.observable();
self.messageText = ko.observable();
self.messageCollection = ko.observableArray();

self.hubChanged = function () {

// Setup hub connection.
$.connection.hub.url = "../signalR";
self.hubConnection = $.hubConnection();

// Get the selected hub name.
var selectedHubName;
_.each(self.hubs(), function(item) {
if (item.hubId == self.selectedHub()) {
selectedHubName = item.hubName;
}
});

// Check for a selected connection
if (self.selectedHub()) {

// Create proxy.
self.hub = self.hubConnection.createHubProxy(selectedHubName);

// Remove any existing listener(s).
self.hub.off('addNewMessageToPage');

// Setup listener.
self.hub.On('addNewMessageToPage', function (sender, message) {
self.messageCollection().push({ hubName: selectedHubName, name: selectedHubName, message: message, dateTime: new Date().toLocaleString() });
$('#hubMessageGrid').dxDataGrid('instance').refresh();
});

// start connection.
self.hubConnection.start()
.done(function() {
toastr.success('hub connected');
$('#sendMessageButton').click(function() {
self.hub.invoke('sendAll', 'hub management page', self.messageText());
self.messageText('');
});

})
.fail(function(error) {
toastr.error('hub connection ' + error);
});
}
};

最佳答案

您可以先通过调用 self.hub.stop() 来断开集线器的连接;功能

关于javascript - SignalR 更改中心订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38509756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com