RPC в .NET Core и Xamarin

Я нахожусь на ранних стадиях создания коллекционной карточной онлайн-игры для мобильных устройств на 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, чтобы обеспечить максимальную производительность, хотя при необходимости меня можно было бы убедить в обратном. Сервер также должен иметь возможность одновременно обрабатывать множество запросов.


person Bob2004    schedule 13.04.2018    source источник
comment
I would prefer to communicate directly over TCP rather than HTTP Многие компании используют брандмауэры и блокируют исходящие порты, отличные от 80 443, ... и т. д. to ensure maximum performance Вы уверены, что сможете использовать эту минимальную разницу? КСТАТИ: Как вы думаете, карточная игра нуждается в реагировании в реальном времени?   -  person Eser    schedule 14.04.2018
comment
Это действительно широкий вопрос (на самом деле в вашем сообщении есть несколько «?») с множеством самоуверенных ответов. Вы действительно должны сфокусировать свой вопрос на конкретной проблеме, а также подумать о том, чтобы перенести его на gamedev.stackexchange.com.   -  person SushiHangover    schedule 14.04.2018
comment
@Eser - Как уже было сказано, я новичок, когда дело доходит до сетей; Я действительно понятия не имею, что делаю. У меня сложилось впечатление, что разница была достаточно большой, чтобы на нее стоило обратить внимание, и делать что-то непосредственно в TCP не казалось труднее, чем использовать HTTP, так почему бы и нет? Но вы хорошо заметили порты, и если разница в производительности минимальна, то не имеет большого значения, что я использую. Как вы говорите, ему не нужен ответ в реальном времени; просто для одновременной обработки потенциально большого количества соединений.   -  person Bob2004    schedule 14.04.2018
comment
@SushiHangover - мой вопрос в основном сводится к тому, как мне реализовать RPC в Xamarin/.NET Core, и есть ли подходящая библиотека (например, WCF или gRPC) для упрощения процесса? - Любые дополнительные самоуверенные ответы - это просто попытка сузить то, что, по моему мнению, мне нужно, на основе исследований, которые я провел до сих пор.   -  person Bob2004    schedule 14.04.2018
comment
@ Bob2004 How 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


Ответы (1)


Что ж, я не смог найти никакой документации о том, как реализовать RPC между .NET Core Server и клиентом Xamarin с нуля, или какой-либо другой информации о том, как это сделать.

Однако после долгих поисков я наткнулся на Thrift, который (очевидно) поддерживает как Xamarin, так и .NET. Core, и в значительной степени идеально соответствует тому, как я хочу делать вещи. У меня есть некоторые трудности с его работой, но я думаю, что это отдельный вопрос.

person Bob2004    schedule 18.04.2018
comment
Работает сейчас или еще есть проблемы? У меня также есть такое же требование. - person Morse; 15.01.2019