Canvas.Views.Web 4.5.3

There is a newer version of this package available.
See the version list below for details.
dotnet add package Canvas.Views.Web --version 4.5.3
                    
NuGet\Install-Package Canvas.Views.Web -Version 4.5.3
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Canvas.Views.Web" Version="4.5.3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Canvas.Views.Web" Version="4.5.3" />
                    
Directory.Packages.props
<PackageReference Include="Canvas.Views.Web" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Canvas.Views.Web --version 4.5.3
                    
#r "nuget: Canvas.Views.Web, 4.5.3"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Canvas.Views.Web@4.5.3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Canvas.Views.Web&version=4.5.3
                    
Install as a Cake Addin
#tool nuget:?package=Canvas.Views.Web&version=4.5.3
                    
Install as a Cake Tool

Distribution - Virtual Actor Framework

There is decent amount of actor-like frameworks, including those that support an idea of Virtual Actors, e.g. Orleans and Proto.Actor

The two mentioned frameworks are the most flexible but have some drawbacks, like extra build step or inability to use different transport protocol. Below is the list of features built in the current framework. Each of them can be considered as an advantage or a disadvantage depending on specific use-case.

Status

For virtual actors and reactive store

Install-Package Distribution

For clusters and interserver communication

Install-Package Distribution.Cluster

GitHub Workflow Status (with event) GitHub GitHub

Features

  • Safe single-threaded execution in a background worker without locks
  • Zero configuration
  • Local actors and store are cross-platform .NET Standard 2.0
  • UDP broadcasting for automatic service discovery without a single point of failure
  • Peer-To-Peer network of independent nodes without consensus leaders
  • Random placement of virtual actors within a cluster
  • Ability to create multiple instances of the same type of actor using unique ID
  • Ability to override any layer, including protocol, actor placement strategy, service discovery, etc
  • No dangerous binary serialization or 3rd party serialization libraries
  • Simple C# POCO structs for messages, no attributes or other decorators
  • Process messages using single or multiple actors with [Subscription] attribute
  • Kestrel server middleware to process message queries
  • Automatic loading and mapping for actors and messages at startup

Sample

This is an example of using actors locally within the same app.

// Define message and response format 

public class DemoMessage { public string Name { get; set; }}
public class DemoResponse { public string Data { get; set; }}

// Define actor processing this particular message   

public class DemoActor
{
  [Processor]
  public virtual Task<DemoResponse> SomeAction(DemoMessage message)
  {
    return Task.FromResult(new DemoResponse { Data = "Response from actor" });
  }
}

// Processing

public class Client
{
  async Task SendMessageToActor()
  {
    var scene = new Scene();
    var message = new DemoMessage { Name = "Message to actor" };
    var response = await scene.Send<DemoResponse>("Custom Actor ID", message);

    Console.WriteLine("Response : " + response.Data);
  }
}

An example with a distributed network of actors in the cluster is a bit more complex and can be found in the Samples directory.

Also, can be used as an alternative to RX.NET.

Disclaimer

In order to keep things simple and flexible, the main focus was on simplicity and scalability rather than performance.

Notes

Practically all parts of this framework use the most basic implementation of each layer meaning that it's a general purpose implementation that may need to be extended to solve more specific problems.

  1. HTTP and JSON are somewhat slow, but were chosen for communication instead of sockets to make it easier to build a network of a million of nodes without a need to manage permanent connections between peers.
  2. UDP broadcasting can detect nodes within the same network segment. To make peer discovery global there will be a need for services like Consul or manual NAT traversing.
  3. There is a heavy use of reflection for mapping between actors and messages. No benchmarks, but switching to compiled delegates may improve latency.

Improvements

Even though existing modules are the most basic at the core, they can be easily extended or overridden to achieve more specific goals.

  1. When there is no requirement to have millions of nodes, it's possible to implement ICommunicator and use sockets with Message Pack or Flat Buffers for lower latency.
  2. Peer discovery is encapsulated inside of the Beacon class. When needed, it's easy to override any of its method or implement IBeacon to use it with Consul or some other service discovery tool.
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
5.7.6 18 9/13/2025
5.7.5 142 9/1/2025
5.7.1 127 9/1/2025
5.7.0 129 9/1/2025
5.6.9 235 5/8/2025
5.6.8 171 5/7/2025
5.6.7 177 5/7/2025
5.6.6 178 5/7/2025
5.6.5 170 2/4/2025
5.6.3 153 1/28/2025
5.6.2 148 1/20/2025
5.6.1 132 1/17/2025
5.6.0 126 1/17/2025
5.5.0 131 1/8/2025
5.0.0 156 12/27/2024
4.5.6 148 12/10/2024
4.5.5 252 10/26/2024
4.5.4 130 10/26/2024
4.5.3 163 10/25/2024
4.5.2 135 10/24/2024
4.5.1 144 10/24/2024
4.5.0 135 10/24/2024
4.0.0 158 10/9/2024
3.3.0 147 10/6/2024
3.2.9 155 9/28/2024
3.2.8 147 9/25/2024
3.2.7 137 9/25/2024
3.2.6 144 9/25/2024
3.2.5 144 9/24/2024
3.2.4 190 8/27/2024
3.2.3 162 8/24/2024
3.2.2 173 8/19/2024
3.2.1 172 8/18/2024
3.2.0 169 8/16/2024
3.1.5 169 6/24/2024
3.1.4 191 6/2/2024
3.1.3 163 5/29/2024
3.1.2 164 5/26/2024
3.1.1 151 5/23/2024
3.1.0 191 5/21/2024
3.0.9 155 5/21/2024
3.0.8 190 3/25/2024
3.0.7 171 3/24/2024
3.0.6 157 3/20/2024
3.0.5 180 3/18/2024
3.0.4 155 3/18/2024
3.0.3 170 3/18/2024
3.0.1 165 3/17/2024
3.0.0 166 3/15/2024
2.0.7 175 3/14/2024
2.0.6 175 3/14/2024
2.0.5 147 3/7/2024
2.0.3 184 3/3/2024
2.0.2 163 3/3/2024
2.0.1 166 3/1/2024
2.0.0 158 2/26/2024
1.9.9 144 2/25/2024
1.9.8 157 2/24/2024
1.9.6 167 2/17/2024
1.9.5 159 2/17/2024
1.9.4 169 2/15/2024
1.9.3 196 2/11/2024
1.9.2 162 2/11/2024
1.9.1 147 2/11/2024
1.9.0 161 2/9/2024
1.8.9 183 2/8/2024
1.8.8 182 2/8/2024
1.8.7 158 2/5/2024
1.8.6 172 2/5/2024
1.8.5 180 1/28/2024
1.8.4 178 1/26/2024
1.8.3 151 1/26/2024
1.8.2 152 1/25/2024
1.8.1 188 1/18/2024
1.8.0 317 5/29/2023
1.7.9-prerelease 211 3/12/2023
1.7.8-prerelease 226 3/5/2023
1.7.7-prerelease 218 2/24/2023
1.7.6-prerelease 229 2/20/2023
1.7.5-prerelease 210 2/14/2023
1.7.1-prerelease 228 2/9/2023
1.7.0-prerelease 215 2/5/2023
1.6.7-prerelease 229 2/4/2023
1.6.6-prerelease 247 2/1/2023
1.6.5-prerelease 295 1/12/2023
1.6.4-prerelease 225 1/8/2023
1.6.3-prerelease 245 12/18/2022
1.6.2-prerelease 225 12/4/2022
1.6.1-prerelease 252 11/24/2022
1.6.0-prerelease 237 11/19/2022
1.5.9-prerelease 241 11/6/2022
1.5.6-prerelease 248 11/3/2022
1.5.5-prerelease 222 11/2/2022
1.5.3-prerelease 227 10/29/2022
1.5.2-prerelease 246 10/2/2022
1.5.1-prerelease 251 10/2/2022
1.5.0-prerelease 244 9/21/2022
1.4.0-prerelease 253 8/7/2022
1.3.9-prerelease 275 8/7/2022
1.3.8-prerelease 284 8/7/2022
1.3.7-prerelease 255 8/2/2022
1.3.6-prerelease 232 8/1/2022
1.3.5-prerelease 240 8/1/2022
1.3.4-prerelease 244 8/1/2022
1.3.3-prerelease 237 8/1/2022
1.3.2-prerelease 254 7/29/2022
1.3.1-prerelease 273 7/21/2022
1.3.0-prerelease 268 7/13/2022
1.2.9-prerelease 281 7/11/2022
1.2.8-prerelease 251 7/9/2022
1.2.7-prerelease 255 7/9/2022
1.2.6-prerelease 272 7/7/2022
1.2.5-prerelease 262 7/1/2022
1.2.4-prerelease 289 5/8/2022
1.2.3-prerelease 274 4/18/2022
1.2.2-prerelease 270 4/17/2022
1.2.1-prerelease 284 4/16/2022
1.2.0-prerelease 271 4/16/2022
1.1.9-prerelease 288 4/15/2022
1.1.8-prerelease 268 4/15/2022
1.1.7-prerelease 272 4/14/2022
1.1.6-prerelease 283 4/12/2022
1.1.5-prerelease 277 4/9/2022
1.1.4-prerelease 267 4/7/2022
1.1.3-prerelease 302 4/6/2022
1.1.2-prerelease 242 4/5/2022
1.1.1-prerelease 255 4/4/2022
1.1.0-prerelease 271 4/3/2022
1.0.9-prerelease 276 4/3/2022
1.0.8-prerelease 281 4/3/2022
1.0.7-prerelease 265 4/3/2022
1.0.6-prerelease 283 4/3/2022
1.0.5-prerelease 284 3/26/2022
1.0.0-prerelease 276 3/24/2022