• Как реализовываются микросервисные проекты?

    @Kostik_1993
    Web Developer
    У меня есть проект, небольшой сервис на js/php он же вебморда. А так же ещё два сервиса один это сервис питоне, он слушает реббит подхватывает данные из него обрабатывает, как только закончил отправляет запрос в реббит о готовности. Вебморда слушает запрос когда работа первого сервиса закончена он отправляет эти данные уже обычным пост запрос на ещё один на ноде, тот если есть данные отдаёт их, если нет создаётся таска по завершении которой вебморда через реббит узнаёт. У каждого сервиса своя зона отвественности и свои языки. А общаться они через реббит и апи. А из себя представляют полноценные приложения способные работать и отдельно. В теории они могут быть и модулями.

    Вообще главное отличие модулей от микросервисов это их полная изоляция и общение только через транспорт, а также они имеют свои базы. Если у вас одна общая бд то это уже скорее монолит.
    Ответ написан
    Комментировать
  • Как реализовываются микросервисные проекты?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Это полностью проекто зависимая штука. К микросервисам стоит выростать из монолита. Микросервис по хорошему должен покрывать полностью конкретный домен, но им же и огранививаться. Вот тут как раз и кроется сложность. Если вы никогда не реализовывали проекты конкретной области, вероятнее всего вы разделите микросервисы не правильно, что усложнит и удорожает поддержку. В худшем сценарии ваши микросервисы будут чем-то вроде REST вокруг таблички в БД.

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

    Пример плохого разделения для задачи отправки писем по событиям (регистрация, новости, маркетинг...):
    Сервис_А подготавливает данные и дергает Сервис_Б, что бы тот запихнул их в шаблон и отправил почту.
    Подход плохой потому, что каждое новое сообщение требует изменений И Сервис_А И Сервис_Б, причем синхронизированных.

    Та же задача, но с более лучшим решением:
    Сервис_А отправляет события в стиле "юзер зарегался", "юзер сделал покупку",... Сервис_Б самостоятельно решает, что и когда отправлять ползователю.
    В этом случае Сервис_А и Сервис_Б зависят друг от друга по минимуму.
    Ответ написан
    Комментировать
  • Как реализовываются микросервисные проекты?

    vabka
    @vabka Куратор тега Веб-разработка
    Токсичный шарпист
    Под микросервисами обычно понимают N раздельных процессов, которые могут запускаться на разных компьютерах. Далее они уже коммуницируют через какой-то транспорт, если это вообще нужно.

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

    Как конкретно ведётся разработка - это уже на откуп команде. Подход легко может различаться исходя из языка/платформы.
    Ответ написан
    Комментировать
  • Как реализовываются микросервисные проекты?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Это неважно. Можно для удобства накидать папки с проектами в одну папку и открывать её в IDE, а проекты оформить как модули. Но проекты могут разрабатываться на разных языках, разными командами и в разных местах. Тогда вы просто договариваетесь о контракте - протоколах, форматах, порядке обмена информацией между модулями, а дальше каждый пилит так как ему удобно.
    Ответ написан
    2 комментария
  • Можете покритиковать мой код?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    1) (Вкусовщина) стиль наименования не самый удачный. И переменные и функции называются одинаково - каждое слово с большой буквы без разделителей. Во всех массово применяемых стилях обычно переменные, функции и константы называются по разному. Например, переменные можно называть log_password. Функции и так оставить с большой буквы, а константы - полностью большими буквами.

    2) обилие вложенных if. Практикуйте ранний выход. Например в Login() можно сделать так:
    if (Data.is_open()) {
      std::cout << "Ошибка. У вас нет аккаунта" << std::endl;
      return;
    }


    И весь оставшийся код оказывается на 1 уровень выше.

    3) Бесконечные рекурсивные вызовы - это плохо. Рано или поздно программа упадет с закончившимся стеком.
    У вас Menu вызывает Login, который опять вызывает Menu. Да и сам Menu тоже.

    Лучше сделать в Menu бесконечный цикл (while(true)) и или выходить из программы через exit(), или возвращать из Login, что надо завершаться и тогда в Menu делать break.
    Ответ написан
    1 комментарий
  • Можете покритиковать мой код?

    @Macaronin
    Не слушай никого, главное чтобы работало
    Ответ написан
    4 комментария
  • Как исправить ошибку SocketException: Попытка установить соединение была безуспешной?

    hekkaaa
    @hekkaaa
    C#/.NET Developer
    Привет!
    Как я вижу, Вы используете коннектор MySQL.
    В вашем частном случае проблема состоит в том что по указанным данным, метод не может достучаться до БД.
    Как видите сокеты сети на стороне .NET используются System.Net.Sockets.Socket.Receive.

    Возможно в строке подключения не указана База данных !внутри! уже самого MySQL.
    Вот пример иной строчки подключения которое удалось на гуглить :
    string Connect="Database=БАЗА;Data Source=ХОСТ;User Id=ПОЛЬЗОВАТЕЛЬ;Password=ПАРОЛЬ";
    Ответ написан
    Комментировать
  • Как передать переменные с другого класса в скрипте?

    @EugeneTypescript
    Учусь и работаю
    обращаться к объекту - экземпляру этого класса
    В чем проблема?
    Ответ написан
    5 комментариев
  • Как передать переменные с другого класса в скрипте?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Обращаешься к свойствам экземпляра объекта и всё.
    В чём сложность?
    Ответ написан
    3 комментария
  • Как передать переменные с другого класса в скрипте?

    @NoNameDeveloper
    Unity Developer
    Рекомендую тебе открыть вот эту ссылку: https://docs.microsoft.com/en-us/dotnet/csharp/pro...
    И начать изучать C#, а то такие вопросы тут ни к чему.

    using UnityEngine;
    using UnityEngine.UI;
    
    public class NewBehaviourScript : MonoBehaviour
    {
        public Text Text;
    
        // Объявляешь поле типа 'Data'
        public Data SomeData;
    
        // Methods
    
        private void Awake()
        {
            // Создаешь экземпляр, иначе будет возвращать NULL.
            SomeData = new Data();
    
            // Используешь поля
            SomeData.field1 = 2;
            SomeData.field2 = false;
            SomeData.field3 = "release";
        }
    
        void Update()
        {
            Text.text = SomeData.field1 + "";
        }
    
        public void OnClick()
        {
            // Обращаешься к полю через созданного экземпляра типа 'Data'.
            SomeData.field1++;
        }
    
        
    
    }
    
    public class Data
    {
            public int field1 = 1;
            public bool field2 = true;
            public string field3 = "test";
    }
    Ответ написан
    Комментировать
  • Как сделать объект, содержащий пары ключ-значение в Unity?

    @NoNameDeveloper
    Unity Developer
    Вариант 1: На сервере вы можете отправить JSON (обычный string) (В твоем случае не рекомендую). Но он будет весить по больше в зависимости конечно же от количество полей. В юнити есть JsonUtility который позволит вам работать с данным форматом. У вас должен быть класс только для данных

    public class Data {
      public int field1 = 1;
      public bool field2 = true;
      public string field3 = "test"
    }


    На выходе:
    {
      "field1": 1,
      "field2": true,
      "field3": "test"
    }


    Вариант 2: Вы можете использовать BinaryWriter/BinaryReader и отправить на сервере byte[]. Файлы будут весить меньше. Но сохранять и загружать значения будете в ручную:

    using UnityEngine;
    
    public class Data : MonoBehaviour
    {
        public int field1 = 1;
        public bool field2 = true;
        public string field3 = "test";
    
        // Methods
    
        public byte[] Save()
        {
        	MemoryStream stream = new MemoryStream();
            BinaryWriter writer = new BinaryWriter(stream);
    
            // В каком порядке записываются данные, в таком и нжно будет читать!
            writer.Write(field1); // int
            writer.Write(field2); // bool
            writer.Write(field3); // string
    
            // Output - byte[] который используется для отправки с помощью WWWForm.
            return stream.ToArray();
        }
    
        public void Load(byte[] data)
        {
            MemoryStream stream = new MemoryStream(data);
            using (BinaryReader reader = new BinaryReader(stream))
            {
                // Читаем данные.
                field1 = reader.ReadInt32();
                field2 = reader.ReadBoolean();
                field3 = reader.ReadString();
            }
        }
    }
    Ответ написан
    3 комментария
  • Как сделать сохранение для Web игры?

    @NoNameDeveloper
    Unity Developer
    Я не работал с WebGL, но вот что говорит ответ из интернета:

    Вы можете использовать PlayerPrefs, но размер файла PlayerPrefs в WebPlayer ограничен 1 МБ на URL, пользователя и компьютер...


    Если файл весит больше, то нужно сохранять на своем сервере и загружать оттуда же.
    Ответ написан
    1 комментарий
  • Как скомпилировать игру под IOS без Xcode?

    vabka
    @vabka
    Токсичный шарпист
    Аналогов под windows нет.
    Можете использовать облачные сервисы
    Ответ написан
    6 комментариев
  • Как сделать в слайдере, что при достижение Max value началось сразу возвращение к 0?

    @banyMi
    У меня от 0 к 1 реализовано вот-так.

    public Slider throwingPowerSlider;

    [Range(0f,1f)] //от 0 к 1
    private float T;

    private void Update()
    {
    T = Mathf.Sin(Time.time * 3f) * 0.5f + 0.5f;
    throwingPowerSlider.value = T;
    }
    Ответ написан
    Комментировать