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

Сеть в Unity3D

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

Сообщение newwise 05 окт 2016, 17:34

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

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

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

В игре отрабатывается ситуация, пока сообщения от сервера не получены, клиент замер и ждет, а если пакет потерян из-за сбоя сети, то он будет ждать вечно.
newwise
UNец
 
Сообщения: 25
Зарегистрирован: 23 фев 2016, 22:45

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

Сообщение newwise 05 окт 2016, 18:06

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

TRUE - означает ли, что получатель ГАРАНТИРОВАННО получит сообщение? Или система работает так - "я отправил, а что дальше с ним, не знаю"?
newwise
UNец
 
Сообщения: 25
Зарегистрирован: 23 фев 2016, 22:45

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

Сообщение ~AvA~ 06 окт 2016, 11:45

Каналу назначается QoS (quality of service), и потом если ты отправляешь через reliable канал - сообщение будет доставлено и по доке можно смотреть какие qos у каналов бывают
Во втором вопросе , true , означает что сообщение было отправлено.
Аватара пользователя
~AvA~
UNIверсал
 
Сообщения: 396
Зарегистрирован: 17 фев 2015, 13:09

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

Сообщение newwise 06 окт 2016, 12:19

Про каналы я знаю, отправляю по reliable. Получается такая система: я проверяю на TRUE, все хорошо, но если произошел разрыв сообщения, то сообщение не будут доставлено все равно, даже после TRUE
Что делать клиенту, когда он восстановил соединение (по кнопке или автоматом не важно)? Клиент же ожидает ответа, а ответ не прейдет, т.к. либо отправленное не дошло, либо сервер не смог, ответить т.к. произошел разрыв.
newwise
UNец
 
Сообщения: 25
Зарегистрирован: 23 фев 2016, 22:45

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

Сообщение IDoNotExist 06 окт 2016, 13:15

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

А зачем клиенту знать что сообщение дошло? Он должен отправлять запрос и получать овет, если ответ не был получен до разрыва соединения то отсюда и пляшите.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

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

Сообщение newwise 06 окт 2016, 13:49

А как клиент поймет, что нужно ждать ответа, если клиент не знает, что сообщение дошло? Потомучто если оно не дошло, то он вечно будет ждать ответа, что некорректно
newwise
UNец
 
Сообщения: 25
Зарегистрирован: 23 фев 2016, 22:45

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

Сообщение IDoNotExist 06 окт 2016, 14:00

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

Некорректно как раз таки завязывать клиент на ожидание определенного сообщения, по приходу сообщения должно инициироваться событие связанное с ним, клиенту должно быть пофиг что там пришло или не пришло на сервер.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

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

Сообщение newwise 06 окт 2016, 14:43

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

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

Сообщение IDoNotExist 06 окт 2016, 20:26

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

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

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

Сервер должен возвращать результат "кликов" сообщениями которые генерируют события изменения модели данных.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

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

Сообщение newwise 07 окт 2016, 13:35

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

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

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

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


Спасибо за ответы, можете пояснить поподробней, вопрос как раз в том, что делать клиенту и как это реализовать, когда сервер ничего не вернул, т.е. как именно понять, что сервер уже ничего и не вернет, чтобы сбросить в некое состояние до нажатия "кликов"?
newwise
UNец
 
Сообщения: 25
Зарегистрирован: 23 фев 2016, 22:45

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

Сообщение IDoNotExist 07 окт 2016, 13:57

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

Это сложно объяснить абстрактно, приводите конкретные примеры.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

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

Сообщение lol 08 окт 2016, 09:10

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

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

Сообщение Cr0c 08 окт 2016, 10:37

lol писал(а):когда сервер не вернул ответ в случае ошибки в коде на сервере, ну это никак кроме как исправления этой ошибки то и не обойдешь.

Есть таймаут запроса, счетчик запросов без ответа и сообщение о потере пакетов, хотя бы.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

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

Сообщение lol 10 окт 2016, 09:20

Ну если речь об обычных запросах то да.
lol
Старожил
 
Сообщения: 508
Зарегистрирован: 15 ноя 2009, 10:48
Откуда: Москва

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

Сообщение Cybernoise 09 фев 2018, 16:27

есть вопрос - каким каналом отправляются рпц и команды серверу ? и как где это настраивается ?
Аватара пользователя
Cybernoise
UNITрон
 
Сообщения: 262
Зарегистрирован: 12 июн 2013, 13:43
Откуда: Одесса
Skype: Mister4ui

След.

Вернуться в Сеть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3