Я пишу свой собственный клиент SignalR на Java, и у меня возникают некоторые проблемы.
Сначала я хочу реализовать логику PersistentConnection. Код моего сервера взят из примера:
public class Battle : PersistentConnection
{
protected override Task OnConnectedAsync(IRequest request, string connectionId)
{
return Connection.Broadcast("Connection " + connectionId + " connected");
}
protected override Task OnReconnectedAsync(IRequest request, IEnumerable<string> groups, string clientId)
{
return Connection.Broadcast("Client " + clientId + " re-connected");
}
protected override Task OnReceivedAsync(IRequest request, string connectionId, string data)
{
// return Connection.Broadcast("Connection " + connectionId + " sent ");
return Connection.Send(connectionId, "Connection " + connectionId + " sent ");
}
protected override Task OnDisconnectAsync(string connectionId)
{
return Connection.Broadcast("Connection " + connectionId + " disconncted");
}
protected override Task OnErrorAsync(Exception error)
{
return Connection.Broadcast("Error occured " + error);
}
}
Судя по коду клиента .NET, я понял, что для подключения к серверу клиент должен:
1) Отправить запрос на http://myserver/battle/negotiate
и получить ConnectionId
из ответа
2) Отправить запрос на http://myserver/battle/connect?transport=longPolling&connectionId=<received_connection_id>
Мой вопрос: что должен делать клиент, чтобы поддерживать соединение? Как он должен прослушивать широковещательные сообщения сервера?
Другая проблема заключается в том, что я не получаю ответа, когда пытаюсь отправить сообщение с клиента на сервер после установления соединения. Я отправляю запрос на http://myserver/battle/send?transport=longPolling&connectionId=<received_connection_id>
. Всегда вызывается метод OnReceivedAsync
, но я не получаю ответа (независимо от отправленных данных).
Буду признателен за любые пояснения по моим вопросам и по внутренним принципам работы SignalR. Заранее спасибо.