Я нахожусь на ранних стадиях создания коллекционной карточной онлайн-игры для мобильных устройств на C#. Сам игровой клиент построен с помощью Xamarin и (в конечном итоге) будет работать как на iOS, так и на Android. Игровой сервер представляет собой консольное приложение .NET Core, работающее на сервере Linux.
Однако я не могу решить, как управлять связью между клиентом и сервером. Я полный новичок, когда дело доходит до сетей; Основная цель этого проекта - узнать немного о том, как это сделать.
Мой план состоит в том, чтобы использовать некоторую форму RPC для связи между ними, чтобы клиент мог просто вызвать метод на сервере и получить полезный ответ — что-то вроде:
CardCollection cards = Service.GetCards(playername);
Где GetCards(имя_игрока) — это метод на сервере, доступный с помощью сервисного контракта. Первоначально я намеревался использовать для этой цели WCF с NetTcpBinding, поскольку он идеально подходит для моих нужд. Однако оказывается, что это недоступно в .NET Core. Поэтому вместо этого я решил использовать gRPC, который также делает почти то, что мне нужно, за исключением того, что оказалось, что это недоступно для Xamarin.
Итак, мой вопрос: существует ли уже существующая библиотека, которую я могу использовать для управления связью между моим клиентом и сервером, которая работает в .Net Core и Xamarin, или мне нужно будет создать что-то свое? Если мне нужно что-то написать самому, есть ли какая-нибудь полезная документация/руководство о том, как лучше всего это сделать в .NET? Я нашел учебники по созданию базового TCP-сервера, но это почти все. Я понятия не имею, как масштабировать это в соответствии с моими потребностями.
Почти вся информация, которую я нашел до сих пор, касалась создания веб-сервисов RESTful, что немного отличается от того, что мне нужно. На самом деле мне не нужны многие функции REST API, и я бы предпочел общаться напрямую через TCP, а не через HTTP, чтобы обеспечить максимальную производительность, хотя при необходимости меня можно было бы убедить в обратном. Сервер также должен иметь возможность одновременно обрабатывать множество запросов.
I would prefer to communicate directly over TCP rather than HTTP
Многие компании используют брандмауэры и блокируют исходящие порты, отличные от 80 443, ... и т. д.to ensure maximum performance
Вы уверены, что сможете использовать эту минимальную разницу? КСТАТИ: Как вы думаете, карточная игра нуждается в реагировании в реальном времени? - person Eser   schedule 14.04.2018How should I go about implementing RPC in Xamarin/.NET Core, and is there a suitable library (like WCF or gRPC) to ease the process?
: Рекомендации/выбор сторонних библиотек: stackoverflow предназначен не для этого. - person SushiHangover   schedule 14.04.2018