Skip to content

Ethan0007/SignalP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NuGet Downloads NuGet Version

🧩 SignalP — Lightweight WebSocket Middleware for .NET SignalP is a minimal, developer-friendly alternative to SignalR — built on pure WebSockets for real-time communication in .NET applications.

Sometimes, you don’t need a full framework — just a socket that works.

🚀 Features 🔹 Simple WebSocket-based middleware 🔹 Automatic connection & disconnection handling 🔹 Built-in broadcast, private, and group messaging 🔹 Native WebSocket client support (no SDK required) 🔹 ASP.NET Core integration with Dependency Injection 🔹 Perfect for IoT dashboards, chat, admin tools, and internal systems

🛠️ Installation Add the package (when published):

dotnet add package SignalP

Or include the source in your project.

⚙️ Setup

Program.cs
using SignalP;
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
builder.Services.AddSignalP(); // Register SignalP middleware
var app = builder.Build();

app.UseHttpsRedirection();
app.UseWebSockets(); //Must enable WebSockets
app.UseSignalP(opts =>
{
    opts.Path = "/signalp"; // WebSocket endpoint
});

app.MapControllers();
app.Run();

💬 Client Example (Browser)

const ws = new WebSocket("wss://yourapp.azurewebsites.net/signal?user=JHPoint");
ws.onopen = () => console.log("✅ Connected");
ws.onmessage = (msg) => console.log("📩 Message:", msg.data);
ws.onclose = () => console.log("❌ Disconnected");

function broadcast(payload) {
  ws.send(JSON.stringify({ type: "broadcast", payload }));
}

broadcast("Hello from browser!");

🧠 Message Structure

SignalP uses a simple JSON message format:
{
  "type": "broadcast",
  "payload": "Hello, world!",
  "target": "optionalConnectionId"
}

Supported types

  • broadcast — sends to all clients
  • private — sends to a specific connection
  • group — sends to clients in a named group

🆚 SignalP vs SignalR vs Raw WebSocket

Feature Raw WebSocket SignalP SignalR
Transport WebSocket only WebSocket only WebSocket, SSE, Long Polling
Client Native WS Native WS Requires SDK
Connection Handling Manual Auto IDs & events Managed framework
Message Routing Manual Broadcast, Private, Group Hubs & Groups built-in
Scale-Out Manual (Redis) Manual (Redis optional) Built-in (Azure SignalR Service)
Complexity High Low Moderate
Ideal For Custom protocols Dashboards, Chat, IoT, Admin Enterprise, Chat, Collaboration

🧩 Using SignalP in Controllers You can inject and use SignalPService in your controllers:

[ApiController]
[Route("api/[controller]")]
public class NotifyController : ControllerBase
{
    private readonly SignalPService _signalP;

    public NotifyController(SignalPService signalP)
    {
        _signalP = signalP;
    }
    [HttpPost("send")]
    public async Task<IActionResult> SendMessage([FromBody] string message)
    {
        await _signalP.SendToAllAsync(new { type = "broadcast", payload = message });
        await _signalP.SendToConnectionAsync("abc123", new { payload = "Hello JH!" });        
        await _signalP.SendToGroupAsync("admins", new { payload = "New dashboard alerts!" });   
        await _signalP.AddToGroupAsync("abc123", "admins");
        await _signalP.RemoveFromGroupAsync("abc123", "admins");        
        if (_signalP.TryGetConnectionInfo("abc123", out var info))
        {
            Console.WriteLine($"User {info.User} connected at {info.User}");
        }        
        return Ok();
    }
}

⚡ Running in Azure

  1. Go to App Service → Configuration → General Settings
  2. Set WebSockets = On
  3. Deploy and connect to
wss://yourapp.azurewebsites.net/signal

No Azure SignalR Service required.

🧰 Future Plans 🔸 JWT-based authentication 🔸 Redis Pub/Sub scale-out 🔸 Automatic reconnection support 🔸 Group persistence

🧑‍💻 Author Joever Monceda Founder & CEO, Repoint Solutions Inc.

License

License: MIT
Copyright (c) 2025 Joever Monceda Linkedin: Joever Monceda
Medium: Joever Monceda
Twitter @_EthanHunt07 Facebook: Ethan Hunt

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages