【发布时间】:2018-06-01 08:19:27
【问题描述】:
我有一个 Ionic 应用程序,我希望它连接到我的套接字。这在 SignalR 预览中工作得很好,而且基本上仍然可以,但由于某种原因连接需要 2 分钟......
连接时我也遇到了一些错误:
这是我的 javascript 代码:
ngOnInit() {
const connection = new signalR.HubConnectionBuilder()
.withUrl("http://192.168.178.11:8040/socket?sessionId=3dc1dc11")
.build();
connection.on("ReceiveMessage", message => {
console.log(message);
this.zone.run(() => {
if(this.locked == true) {
this.locked = false
} else {
this.locked = true;
}
});
console.log(this.locked);
});
connection.start().catch(err => console.error);
}
这是我的中心:
public class DeviceHub : Hub
{
public override Task OnConnectedAsync()
{
var sessionId = Context.GetHttpContext().Request.Query["sessionId"];
return Groups.AddToGroupAsync(Context.ConnectionId, sessionId);
}
}
这是我在 Startup.cs 中的配置:
app.UseSignalR(routes =>
{
routes.MapHub<DeviceHub>("/socket");
});
现在我的问题是:我该如何解决这个问题?
编辑 1:
延迟是在调用OnConnectedAsync() 方法之前。
编辑 2:
我认为我应该补充的另一件事是它直接向我的 API 发出请求:
ws://192.168.178.11:8040/socket?sessionId=3dc1dc11&id=Pt-JDlSPq2_WEIl-8cdPZA
而这正是需要两分钟才能完成的请求。
编辑 3:
我想指出的另一件事是我正在运行代理。我无法从手机直接连接到 API,因此我使用了proxy。我不知道这是否与它有关,但我只是想指出以防万一。
【问题讨论】:
-
你能检查一下你的
Groups.AddToGroupAsync(Context.ConnectionId, sessionId)没有被屏蔽吗? -
嗯,我试过在上面放一个断点,但是两分钟后才触发。
-
所以你是说在你的
OnConnectedAsync()方法被调用之前很长的延迟?如果是这样,这是重要信息,应该添加到您的问题中。 -
@PaulTurner 是的,我已将其添加到问题中。
-
看起来您的代理可能不支持 websockets,并且检测到这种情况会导致您看到的延迟。
标签: c# asp.net angular asp.net-core signalr