Как ASP.NET Core реализует внутреннюю обработку на стороне сервера SPA? - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь понять, как ASP.NET Core реализует рендеринг на стороне сервера с помощью SPA.Обратите внимание, что это не вопрос с практическими рекомендациями, а вопрос о том, что происходит, когда код выполняется.

Насколько я понимаю, пока что .NET взаимодействует с Node.js, вызывая Node.js экземпляр с помощью методов InvokeAsync<T> или InvokeExportAsync<T>.Путь к файлу js передается вместе с любыми другими параметрами (сериализованными как JSON), которые будут получены функцией module.exports, определенной в самом модуле js.Затем данные результата передаются обратно в .NET, передавая их в обратный вызов, который также передается в функцию module.exports. ASP.NET Core NodeServices README имеет пример этого здесь , а также несколько других далее по странице.SpaServices также имеет очень похожий пример , который конкретно относится к рендерингу на стороне сервера.

Хотя я смог немного лучше понять процесс, покопавшись в исходном коде, я все еще не понимаюНе понимаю, что на самом деле происходит за кулисами .Моя единственная подсказка в том, что INodeServices кратко упоминает , что его методы возвращают объект Task<TResult>, который представляет завершение чего-либо, называемого вызовом RPC.Я изучил это и считаю, что это относится к тому, что называется удаленным вызовом процедуры.К сожалению, я не знаком с RPC, как его использовать или что он делает внутри.

Другая загадка - как данные принимаются в любом направлении.Как функция module.exports получает аргументы, передаваемые InvokeAsync<T> и / или InvokeExportAsync<T> на стороне .NET?Параметр обратного вызова также является загадкой.Откуда поступает этот обратный вызов и как он знает, как отправить данные результатов, переданные ему обратно, в .NET?

Мой вопрос: что здесь происходит под капотом?RPC, кажется, является фактором здесь, но на первый взгляд все это просто волшебство.Существует также этот экземпляр Node.js, о котором идет речь, но что именно это?Это отдельный сервер (и если да, то почему бы просто не использовать http?) Или что-то еще?

Пожалуйста, помогите мне понять, что происходит под капотом.Спасибо.

...