gpt4 book ai didi

c# - SignalR Core在Android客户端上断开连接

转载 作者:行者123 更新时间:2023-12-02 13:41:53 29 4
gpt4 key购买 nike

在Android上开发聊天应用程序时遇到连接问题,它在服务器端使用SignalR Core。与服务器的连接已正确建立,客户端首次调用服务器的方法,然后服务器成功调用客户端的方法,并在Android侦听器连接执行结束时断开。在第一个请求之后,对服务器的每个后续请求都需要重新连接,因为hubConnection.connectionState == HubConnectionState.DISCONNECTED。在每个请求之后重新连接显然是不好的。 SignalR文档没有提到这种情况。
我究竟做错了什么?
Kotlin代码:

override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val hubConnection = HubConnectionBuilder.create("http://192.168.0.171:6000/chathub").build()
hubConnection.start()

hubConnection.on("MessageAdded", {msg ->
chat_view_text.text = msg.from+": "+msg.content
}, ChatMessage::class.java)

chat_view_send_button.setOnClickListener{
if (hubConnection.connectionState == HubConnectionState.CONNECTED){
hubConnection.send("SendMessage", Message("android", "hello world"));
}
}
}
.NET代码:
public class ChatHub : Hub<IClientChatActions>, IServerChatActions
{
public override Task OnConnectedAsync()
{
Console.WriteLine("connected");
return base.OnConnectedAsync();
}

public override Task OnDisconnectedAsync(Exception exception)
{
Console.WriteLine("disconnected");
return base.OnDisconnectedAsync(exception);
}

public async Task SendMessage(Message msg)
{
await Clients.All.MessageAdded(msg);
}
}

最佳答案

Android以这种方式更新UI时失去了连接...
尝试使用Kotlin Coroutines在主线程中更新UI。
建议使用Dispatchers.Main执行与UI相关的事件的调度程序。
为此,添加到您的build.gradle中:

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
在您的activity.kt文件中,将其更改为以下内容:
private var job: Job = Job()
private val scope = CoroutineScope(job + Dispatchers.Main)
...
hubConnection.on("MessageAdded", {msg ->
scope.launch(Dispatchers.Main) {
chat_view_text.text = msg.from+": "+msg.content
}
}, ChatMessage::class.java)

关于c# - SignalR Core在Android客户端上断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62619991/

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