【发布时间】:2020-05-27 00:03:54
【问题描述】:
我有.net core 写api 和android mobile 客户。其中两个之间存在signalr 套接字连接。当用户在移动应用程序上打开event 时,我将这个event data 保存到服务器上的db 并将其发送给通过套接字侦听event creator 的其他users。
我会定期控制移动应用程序上的套接字连接,如果它们失去连接,我可以重新连接它们。到目前为止我没有问题.. 但我有问题保留 data 为 lost connection user
让我举例说明:
有用户:Producer1、Consumer1、Consumer2
如果Producer1 通过mobile app 打开一个事件。它通过httprequest 将data 发送到server,然后我将其保存到db。
将数据保存到db 后,我通过socket connection 将这个data 发送到Consumer1 和Consumer2。
假设Consumer2 在发送event data 时没有网络连接。
Consumer1 有网络连接,成功获取data,我对Consumer1 没有问题。
但是,Consumer2 无法获得data,因为它失去了他们的套接字连接,我们还没有重新连接。
发送的event data 已经消失了。所以Consumer2 不会得到event data。
我的问题是,当Consumer2 重新建立连接时,我如何保留data 并将其发送给Consumer2。这样做的有效和正确方法是什么。
服务器端代码示例:
public async Task AddEvent(GetEventOutput getEventOutput)
{
if(getEventOutput.Active)
{
await _hubContext.Clients.Group(SignalR_EVENT + QUESTION_MARK + EVENT_WITH_USER + EQUAL_DASH + getEventOutput.UserID).SendAsync(CREATE_EVENT_ON_MOBILE, JsonConvert.SerializeObject(getEventOutput));
sendEventCreateNotification(getEventOutput);
}
}
客户端代码示例:
hubConnection.on(CREATE_EVENT_ON_MOBILE, (getEventOutput) -> {
System.out.println("CREATE_EVENT_ON_MOBILE : ");
setUiAfterSignalrHandler.post(new Runnable() {
@Override
public void run() {
if (!isNullOrEmpty(getEventOutput)) {
Event event = gson.fromJson(getEventOutput, Event.class);
eventsWithTimerRecyclerViewAdapter.insertItem(0, event);
setUiAfterSignalrHandler.removeCallbacks(this);
leftAndRightTextWithTimerRecyclerView.removeEmptyPlaceHolder(eventsWithTimerRecyclerViewAdapter);
}
}
});
restartSocket();
}, String.class);
【问题讨论】:
标签: android asp.net-core signalr