我正在尝试构建一个简单的实时应用程序,但是当我连接时,它会在几秒钟后断开连接。
我还假设必须有一种方法可以调用我在服务器上实现的“发送”方法。我知道存在适用于 iOS“SignalRObjc”的 SignalR 客户端,但这会给我带来问题。
问题是:如何调用服务器上的特定方法?为什么会自动断开?我在服务器或客户端实现中犯了一些错误吗?
// 服务器 // ASP.NET Core SignalR
public class ChatHub : Hub
{
public override Task OnConnectedAsync()
{
Debug.WriteLine("Connected cleint with ID :" + Context.ConnectionId);
return base.OnConnectedAsync();
}
public void Send(string message)
{
Clients.All.InvokeAsync("New", message);
Debug.WriteLine("Message invoked");
}
public override Task OnDisconnectedAsync(Exception exception)
{
return base.OnDisconnectedAsync(exception);
}
}
// iOS 应用程序
var socket = WebSocket(url: URL(string: "ws://localhost:50290/api/chat")!)
func websocketDidConnect(socket: WebSocketClient) {
print("Socket connected")
}
func websocketDidDisconnect(socket: WebSocketClient, error: Error?) {
print("Socket disconnected")
}
func websocketDidReceiveMessage(socket: WebSocketClient, text: String) {
print(text)
}
func websocketDidReceiveData(socket: WebSocketClient, data: Data) {
print(data)
}
}
我还在 viewDidLoad 方法中设置了 socket.delegate = self 并发送了一条简单的消息 socket.write(string: "hello")
socket.write 方法中有一个完成块,它永远不会被调用
此外,即使我尝试从服务器发送某些内容,也永远不会调用接收消息方法。