Страница 1 из 2

Гарантированная доставка сообщения Unet

СообщениеДобавлено: 05 окт 2016, 17:34
newwise
Народ, использую в сетевом решении Unity NetworkManager. Общение клиент-сервер посредством сообщений NetworkMessage
от клиента client.Send
от сервера NetworkConnection.SendByChannel

Хочу понять, как можно реализовать гарантированную доставку сообщения?

Т.е. если пишу client.Send, и в этот момент сбой сети, можно ли как-то на стороне клиента понять, что сообщение дошло и если нет отправить его опять? Аналогичная ситуация на сервере, как сервер может понять, что сообщение до клиента дошло?

В игре отрабатывается ситуация, пока сообщения от сервера не получены, клиент замер и ждет, а если пакет потерян из-за сбоя сети, то он будет ждать вечно.

Re: Гарантированная доставка сообщения Unet

СообщениеДобавлено: 05 окт 2016, 18:06
newwise
Продолжение вопроса:
public bool SendByChannel(short msgType, Networking.MessageBase msg, int channelId);
метод возвращает bool True if the message was sent.

TRUE - означает ли, что получатель ГАРАНТИРОВАННО получит сообщение? Или система работает так - "я отправил, а что дальше с ним, не знаю"?

Re: Гарантированная доставка сообщения Unet

СообщениеДобавлено: 06 окт 2016, 11:45
~AvA~
Каналу назначается QoS (quality of service), и потом если ты отправляешь через reliable канал - сообщение будет доставлено и по доке можно смотреть какие qos у каналов бывают
Во втором вопросе , true , означает что сообщение было отправлено.

Re: Гарантированная доставка сообщения Unet

СообщениеДобавлено: 06 окт 2016, 12:19
newwise
Про каналы я знаю, отправляю по reliable. Получается такая система: я проверяю на TRUE, все хорошо, но если произошел разрыв сообщения, то сообщение не будут доставлено все равно, даже после TRUE
Что делать клиенту, когда он восстановил соединение (по кнопке или автоматом не важно)? Клиент же ожидает ответа, а ответ не прейдет, т.к. либо отправленное не дошло, либо сервер не смог, ответить т.к. произошел разрыв.

Re: Гарантированная доставка сообщения Unet

СообщениеДобавлено: 06 окт 2016, 13:15
IDoNotExist
newwise писал(а):Получается такая система: я проверяю на TRUE, все хорошо, но если произошел разрыв сообщения, то сообщение не будут доставлено все равно, даже после TRUE

А зачем клиенту знать что сообщение дошло? Он должен отправлять запрос и получать овет, если ответ не был получен до разрыва соединения то отсюда и пляшите.

Re: Гарантированная доставка сообщения Unet

СообщениеДобавлено: 06 окт 2016, 13:49
newwise
А как клиент поймет, что нужно ждать ответа, если клиент не знает, что сообщение дошло? Потомучто если оно не дошло, то он вечно будет ждать ответа, что некорректно

Re: Гарантированная доставка сообщения Unet

СообщениеДобавлено: 06 окт 2016, 14:00
IDoNotExist
newwise писал(а):А как клиент поймет, что нужно ждать ответа, если клиент не знает, что сообщение дошло? Потомучто если оно не дошло, то он вечно будет ждать ответа, что некорректно

Некорректно как раз таки завязывать клиент на ожидание определенного сообщения, по приходу сообщения должно инициироваться событие связанное с ним, клиенту должно быть пофиг что там пришло или не пришло на сервер.

Re: Гарантированная доставка сообщения Unet

СообщениеДобавлено: 06 окт 2016, 14:43
newwise
А как быть тогда, если бессмысленно продолжать геймплей, без ответа от сервера, который содержит ключевую информацию?
И как это клиенту пофиг, когда игрок что-то "кликает", при этом он должен понимать получил ли он результат своих "кликов", если результат рассчитываетсяч на сервере?

Re: Гарантированная доставка сообщения Unet

СообщениеДобавлено: 06 окт 2016, 20:26
IDoNotExist
newwise писал(а):А как быть тогда, если бессмысленно продолжать геймплей, без ответа от сервера, который содержит ключевую информацию?

Прерывать геймплей, возвращать в главное меню, сбрасывать все в изначальное состояние и пробовать переподключиться к серверу.

newwise писал(а):И как это клиенту пофиг, когда игрок что-то "кликает", при этом он должен понимать получил ли он результат своих "кликов", если результат рассчитываетсяч на сервере?

Сервер должен возвращать результат "кликов" сообщениями которые генерируют события изменения модели данных.

Re: Гарантированная доставка сообщения Unet

СообщениеДобавлено: 07 окт 2016, 13:35
newwise
IDoNotExist писал(а):
newwise писал(а):А как быть тогда, если бессмысленно продолжать геймплей, без ответа от сервера, который содержит ключевую информацию?

Прерывать геймплей, возвращать в главное меню, сбрасывать все в изначальное состояние и пробовать переподключиться к серверу.

newwise писал(а):И как это клиенту пофиг, когда игрок что-то "кликает", при этом он должен понимать получил ли он результат своих "кликов", если результат рассчитываетсяч на сервере?

Сервер должен возвращать результат "кликов" сообщениями которые генерируют события изменения модели данных.


Спасибо за ответы, можете пояснить поподробней, вопрос как раз в том, что делать клиенту и как это реализовать, когда сервер ничего не вернул, т.е. как именно понять, что сервер уже ничего и не вернет, чтобы сбросить в некое состояние до нажатия "кликов"?

Re: Гарантированная доставка сообщения Unet

СообщениеДобавлено: 07 окт 2016, 13:57
IDoNotExist
newwise писал(а):Спасибо за ответы, можете пояснить поподробней, вопрос как раз в том, что делать клиенту и как это реализовать, когда сервер ничего не вернул, т.е. как именно понять, что сервер уже ничего и не вернет, чтобы сбросить в некое состояние до нажатия "кликов"?

Это сложно объяснить абстрактно, приводите конкретные примеры.

Re: Гарантированная доставка сообщения Unet

СообщениеДобавлено: 08 окт 2016, 09:10
lol
Так сервер уже ничего и не вернет только в одном случае (ну если на его стороне нет ошибок в коде) - если произошел дисконнект. Дисконнект любой клиент отловить может и далее сбрасывать в меню и просить переподключения. А случай, когда сервер не вернул ответ в случае ошибки в коде на сервере, ну это никак кроме как исправления этой ошибки то и не обойдешь.

Re: Гарантированная доставка сообщения Unet

СообщениеДобавлено: 08 окт 2016, 10:37
Cr0c
lol писал(а):когда сервер не вернул ответ в случае ошибки в коде на сервере, ну это никак кроме как исправления этой ошибки то и не обойдешь.

Есть таймаут запроса, счетчик запросов без ответа и сообщение о потере пакетов, хотя бы.

Re: Гарантированная доставка сообщения Unet

СообщениеДобавлено: 10 окт 2016, 09:20
lol
Ну если речь об обычных запросах то да.

Re: Гарантированная доставка сообщения Unet

СообщениеДобавлено: 09 фев 2018, 16:27
Cybernoise
есть вопрос - каким каналом отправляются рпц и команды серверу ? и как где это настраивается ?