All Projects → Maarten88 → Rrod

Maarten88 / Rrod

Licence: mit
Exploring a new web architecture with React, Redux, Orleans and Dotnet Core

Projects that are alternatives of or similar to Rrod

Phenix.NET7
Phenix Framework 7 for .NET 6
Stars: ✭ 31 (-91.6%)
Mutual labels:  orleans
Orleans.HttpGateway.AspNetCore
No description or website provided.
Stars: ✭ 48 (-86.99%)
Mutual labels:  orleans
Aspnet Core Jwt Authentication Api
ASP.NET Core 2.2 JWT Authentication API
Stars: ✭ 272 (-26.29%)
Mutual labels:  aspnet
aspnet-core-3-basic-authentication-api
ASP.NET Core 3.1 - Basic HTTP Authentication API
Stars: ✭ 70 (-81.03%)
Mutual labels:  aspnet
mediatr-netcore-sample
Example of using mediatr with asp.net core
Stars: ✭ 14 (-96.21%)
Mutual labels:  aspnet
road-to-orleans
This repository illustrates the road to orleans with practical, real-life examples. From most basic, to more advanced techniques.
Stars: ✭ 55 (-85.09%)
Mutual labels:  orleans
fluentassertions.mvc
Fluent Assertions extensions for ASP.NET MVC
Stars: ✭ 36 (-90.24%)
Mutual labels:  aspnet
Clean Code Dotnet
🛁 Clean Code concepts and tools adapted for .NET
Stars: ✭ 4,425 (+1099.19%)
Mutual labels:  aspnet
chess
Chess (game)(♟) built in C# and ASCII art.
Stars: ✭ 20 (-94.58%)
Mutual labels:  orleans
abp-ng-zorro
ng-zorro template for asp.net zero
Stars: ✭ 66 (-82.11%)
Mutual labels:  aspnet
run-aspnet-grpc
Using gRPC in Microservices for Building a high-performance Interservice Communication with .Net 5. See gRPC Microservices and Step by Step Implementation on .NET Course w/ discount->
Stars: ✭ 82 (-77.78%)
Mutual labels:  aspnet
Orleans.SyncWork
This package's intention is to expose an abstract base class to allow https://github.com/dotnet/orleans/ to work with long running CPU bound synchronous work, without becoming overloaded.
Stars: ✭ 31 (-91.6%)
Mutual labels:  orleans
appleauth-net
AppleAuth.NET is a simple library that facilitates the implementation of "Sign in with Apple" for .NET applications.
Stars: ✭ 23 (-93.77%)
Mutual labels:  aspnet
GeekServer
基于.Netcore的开发效率高,性能强,跨平台,持久化层透明,支持不停服热更新的游戏服务器。Best for your unity game server!
Stars: ✭ 171 (-53.66%)
Mutual labels:  orleans
Webmarkupmin
The Web Markup Minifier (abbreviated WebMarkupMin) - a .NET library that contains a set of markup minifiers. The objective of this project is to improve the performance of web applications by reducing the size of HTML, XHTML and XML code.
Stars: ✭ 312 (-15.45%)
Mutual labels:  aspnet
meetups
📆 A repository to organise virtual meetups to discuss Orleans and other distributed systems programming on .NET
Stars: ✭ 79 (-78.59%)
Mutual labels:  orleans
Ray2
Orleans-based CQRS event-driven framework. distributed, ultra-high performance
Stars: ✭ 19 (-94.85%)
Mutual labels:  orleans
Yafnet
🌐 YAF.NET - C# ASP.NET Forum
Stars: ✭ 364 (-1.36%)
Mutual labels:  aspnet
Sapphiredb
SapphireDb Server, a self-hosted, easy to use realtime database for Asp.Net Core and EF Core
Stars: ✭ 326 (-11.65%)
Mutual labels:  aspnet
mysql-dotnet-core
ASP.NET Core 5.0 Web Application using MySQL with Entity Framework
Stars: ✭ 95 (-74.25%)
Mutual labels:  aspnet

RROD - React, Redux, Orleans and Dotnet Core

Exploring a new web architecture

This project is an eploration of next-generation architecture based on Dotnet Core and Javascript. When I started this, it was all very bleeding edge, but I have maintained this repositories as these products matured, and now everything is released and ready for production!

Here is the introductory blogpost. There are follow-up posts on my implementation of Let's Encrypt Certificates, the React, Redux, and Typescript-based frontend, and the Orleans Actor-based backend. I also added Dockerfiles and deployed this solution to a Kubernetes cluster. The config files for that (minus secrets) are in the deploy folder.

This project demonstrates many technologies in context:

Clientside

  • A web front-end with universal/isomorphic rendering, using React 16 and Redux, written in Typescript
  • Bootstrap based UI using react-bootstrap and bootstrap-sass
  • Animations and transitions using ReactTransitionGroup and AnimatedJS
  • Asset pipeline driven by webpack 4, with Hot Module Reloading during development
  • Realtime updates from the server over a SignalR Websocket connection

Web front-end

  • Webserver based on AspNet Core 2.1, running as a standalone executable
  • Automatic request and use of Let's Encrypt TLS certificates on startup
  • AspNet JavascriptServices middleware driving webpack during development (requires node version 8+)
  • AspNet middleware to serve gzip-compressed static assets when possible
  • AspNet Identity using a custom (Orleans based) Identity Store
  • DistributedCache and DataProtection services implemented against Orleans backend
  • Identity Server 4 based authentication
  • Middleware to protect against cross site scripting

Actor back-end

  • Actor-based back-end based on Microsoft Orleans 2.0
  • Using Table Storage for persisting state (install the Azure Storage emulator or configure a 'real' storage connection to run this project)
  • Using Orleans Streams over an Azure Storage Queue for pushing updates from the back-end to subscribers
  • Demo Actor implementing Event Sourcing, re-using the Redux pattern in the backend

Docker / Kubernetes based deployment

  • Use VS Code or Visual Studio for development using a local dotnet environment
  • Dockerfiles and VS Code tasks for local development and debugging using Docker Community Edition
  • Kubernetes Yaml files for deployment to a Kubernetes cluster, such as Azure AKS (add your own configmaps/secrets)

Run it yourself

  1. Install dotnet core 2.1 (or higher) and nodejs 8 (or higher).
  2. Create a secrets.json file, put it in the right place (in Windows, its %AppData%\Roaming\Microsoft\UserSecrets\rrod-secrets\secrets.json, on OSX, it's in ~/.microsoft/usersecrets/rrod-secrets/secrets.json). A storage account first has to be created in Microsoft Azure. On Windows, you can alternatively install the Azure Storage Emulator and put "UseDevelopmentStorage=true" for the storage connection strings. The SMTP connection string is not really necessary. It is possible to configure Orleans with other types of clustering that do not use Azure Storage (such as native Kubernetes Clustering) with a few code changes. The ReduxGrain base class (used for storing users and counter values) is hardcoded against Azure storage and really needs the ReduxConnectionString. The minimum secrets file contains:
{
  "ConnectionStrings": {
    "DataConnectionString": "DefaultEndpointsProtocol=https;AccountName=[AZURE STORAGE ACCOUNT];AccountKey=[STORAGE KEY];EndpointSuffix=core.windows.net",
    "ReduxConnectionString": "DefaultEndpointsProtocol=https;AccountName=[AZURE STORAGE ACCOUNT];AccountKey=[STORAGE KEY];EndpointSuffix=core.windows.net",
    "SmtpConnectionString": "Host=[SMTP HOST];UserName=[SMTP USERNAME];Password=[SMTP PASSWORD]"
  },
  "AcmeSettings": {
    "EmailAddress": "[YOUR EMAIL]",
    "PfxPassword": "[A RANDOM PASSWORD]"
  }
}
  1. in src/OrleansHost, run dotnet run
  2. in src/Webapp, run npm install (or yarn), then dotnet run

Using VS Code or Visual Studio you can also do this from inside the IDE.

Disclaimer

This code should be considered experimental. It works, however the project may have rough edges and has not been thoroughly tested. I welcome feedback!

-- Maarten

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].