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

Photon client отдельном потоке

СообщениеДобавлено: 27 ноя 2014, 15:08
GLeBaTi
Здравствуйте. Сейчас у меня сетевая обработка сообщений реализована примерно так:
Синтаксис:
Используется csharp
class PhotonClient
{
public PhotonClient()
        {
            peer = new LitePeer(this, ConnectionProtocol.Tcp);
            this.StartDispatch();
        }

private void StartDispatch()
        {
            dispatchThread = new Thread(new ThreadStart(DispatchLoop));
            dispatchThread.Start();
        }
private void DispatchLoop()
        {
            while (!abortDispatchThread)
            {
                peer.Service();
                System.Threading.Thread.Sleep(Helper.srvCallTimesMs);
            }
        }
}

Тобишь в отдельном потоке. Сегодня зашел в исходники Photon Unity3D SDK, так там peer.Servece вызывается из Update, т.е. из главного потока игры.
Как лучше делать? Какие плюсы и минусы?

(и пользуясь случаем: чем refresh от reimport отличается? (для скриптов включительно))

Re: Photon client отдельном потоке

СообщениеДобавлено: 12 янв 2015, 01:41
shade007
Юнити апдейт происходит при обновлении кадра и при падении фпс или при полном зависании велик шанс словить дисконект)

Re: Photon client отдельном потоке

СообщениеДобавлено: 12 янв 2015, 14:03
Woolf
Можно и так, только разбор полученных пакетов вам нужно делать на главном потоке. Т.е. вам нужно создать защищенную очередь, в которую вы будете складывать полученные пакеты, а на главном потоке - их доставать и обрабатывать. Можно все сразу, можно по одному на фрейм, а можно и по 5-6 штук за фрейм, это уже как вы реализуете.

чем refresh от reimport отличается


Логично предположить, что refresh - это просто проверить данные скрипта/проекта и, в случае необходимости перекомпилить, а reimport - принудительная перекомпиляция, вне зависимости от того, нужна ли она.

Re: Photon client отдельном потоке

СообщениеДобавлено: 14 янв 2015, 05:57
Lailore
Woolf писал(а):Можно и так, только разбор полученных пакетов вам нужно делать на главном потоке. Т.е. вам нужно создать защищенную очередь, в которую вы будете складывать полученные пакеты, а на главном потоке - их доставать и обрабатывать. Можно все сразу, можно по одному на фрейм, а можно и по 5-6 штук за фрейм, это уже как вы реализуете.

чем refresh от reimport отличается


Логично предположить, что refresh - это просто проверить данные скрипта/проекта и, в случае необходимости перекомпилить, а reimport - принудительная перекомпиляция, вне зависимости от того, нужна ли она.

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