gpt4 book ai didi

signalr - SignalR 客户端集线器上的 On 事件不会被调用

转载 作者:行者123 更新时间:2023-12-02 04:53:17 28 4
gpt4 key购买 nike

我似乎对 SignalR 的 JS 客户端中心有疑问。

问题是“on”处理程序似乎不起作用 - 它不会生成错误,但不会收到服务器发送的任何信号。下面的代码显示了我调用服务器(使用调用)的摘录,它工作正常 - 然后在服务器上我回调acceptHubData,它应该在客户端上被拾取,但没有。

我的目标是,当导航到页面时,每个页面都会打开与特定中心的连接,并在用户移动到另一个页面时释放此连接!!

编辑:使用以下代码片段可以工作,但我想知道为什么下面使用“on”事件的代码不起作用!

    var superHub = $.connection.mySuperHub;

superHub.client.acceptHubData = function (data) {
$('<li>hello there' + data + '</li>').prependTo($('#ul1'))
}

$.connection.hub.start().done(function () {
$('<li>done phase 1</li>').prependTo($('#ul1'))
});

任何帮助将不胜感激!

这是客户端代码(js)

$(document).ready(function () {

var myHub;

try {

var connection = $.hubConnection();

connection.start().done(function () {

myHub = connection.createHubProxy("mySuperHub");

myHub.on('acceptHubData', function (data) {
alert(data); // THIS IS NOT CALLED!
});

myHub.invoke('AcceptSignal', "hello from the client2");

});

}
catch (e) {
alert(e.message);
}
});

这是服务器代码:

[HubName("mySuperHub")]
public class MyHub : Hub
{

private readonly HubEngine _hubEngine;

public MyHub() : this(HubEngine.Instance) { }

public MyHub(HubEngine hubEngine)
{
_hubEngine = hubEngine;
}

public void AcceptSignal(string msg)
{
Clients.Caller.acceptHubData("hi");
Clients.All.acceptHubData("hi");
}

}

最佳答案

您仍然可以使用 on方法在最新版本的 SignalR 中为 JS 客户端集线器方法调用添加事件,但如果不向 hubProxy 添加任何事件监听器在调用hubConnection.start()之前,您将不会订阅该中心。当 hubConnection 时,SignalR 会订阅您拥有事件处理程序的集线器。开始。如果您没有订阅您的中心,则在 start() 之后向该中心添加任何事件将不起作用。

如果您在 start() 之前向集线器添加至少一个事件监听器,即使它不执行任何操作,您也可以使用on向集线器添加您想要的任何其他事件处理程序。在 start() 之后,您的处理程序将被调用。

使用 hubProxy.on('eventName', function (... 添加事件并不重要或autogeneratedHubProxy.client.eventName = function (...在您调用 start() 之前,但只有 on将在 start() 之后成功添加事件监听器被调用。

关于signalr - SignalR 客户端集线器上的 On 事件不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16064651/

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