H.Socket.IO

VB.NET 2025-08-07

H.Socket.IO

基于高性能事件的.NET socket.io库,带有方便的接口,
旨在在用户端编写最小的代码。

特征:

  • 支持最新版本的socket.io服务器
  • 支持名称空间
  • 该库是无效的,不包含NRE
  • 基于事件
  • 完全异步

nuget

Install-Package H.Socket.IO

用法

H.Socket.IO; #nullable enable public class ChatMessage { public string? Username { get; set; } public string? Message { get; set; } public long NumUsers { get; set; } } public async Task ConnectToChatNowShTest() { await using var client = new SocketIoClient(); client.Connected += (sender, args) => Console.WriteLine($"Connected: {args.Namespace}"); client.Disconnected += (sender, args) => Console.WriteLine($"Disconnected. Reason: {args.Reason}, Status: {args.Status:G}"); client.EventReceived += (sender, args) => Console.WriteLine($"EventReceived: Namespace: {args.Namespace}, Value: {args.Value}, IsHandled: {args.IsHandled}"); client.HandledEventReceived += (sender, args) => Console.WriteLine($"HandledEventReceived: Namespace: {args.Namespace}, Value: {args.Value}"); client.UnhandledEventReceived += (sender, args) => Console.WriteLine($"UnhandledEventReceived: Namespace: {args.Namespace}, Value: {args.Value}"); client.ErrorReceived += (sender, args) => Console.WriteLine($"ErrorReceived: Namespace: {args.Namespace}, Value: {args.Value}"); client.ExceptionOccurred += (sender, args) => Console.WriteLine($"ExceptionOccurred: {args.Value}"); client.On("login", () => { Console.WriteLine("You are logged in."); }); client.On("login", json => { Console.WriteLine($"You are logged in. Json: "{json}""); }); client.On("login", message => { Console.WriteLine($"You are logged in. Total number of users: {message.NumUsers}"); }); client.On("user joined", message => { Console.WriteLine($"User joined: {message.Username}. Total number of users: {message.NumUsers}"); }); client.On("user left", message => { Console.WriteLine($"User left: {message.Username}. Total number of users: {message.NumUsers}"); }); client.On("typing", message => { Console.WriteLine($"User typing: {message.Username}"); }); client.On("stop typing", message => { Console.WriteLine($"User stop typing: {message.Username}"); }); client.On("new message", message => { Console.WriteLine($"New message from user "{message.Username}": {message.Message}"); }); await client.ConnectAsync(new Uri("wss://socketio-chat-h9jt.herokuapp.com/")); await client.Emit("add user", "C# H.Socket.IO Test User"); await Task.Delay(TimeSpan.FromMilliseconds(200)); await client.Emit("typing"); await Task.Delay(TimeSpan.FromMilliseconds(200)); await client.Emit("new message", "hello"); await Task.Delay(TimeSpan.FromMilliseconds(200)); await client.Emit("stop typing"); await Task.Delay(TimeSpan.FromSeconds(2)); await client.DisconnectAsync(); }">
 using System ;
using System . Threading . Tasks ;
using H . Socket . IO ;

#nullable enable

public class ChatMessage
{
    public string ? Username { get ; set ; }
    public string ? Message { get ; set ; }
    public long NumUsers { get ; set ; }
}
	
public async Task ConnectToChatNowShTest ( )
{
    await using var client = new SocketIoClient ( ) ;

    client . Connected += ( sender , args ) => Console . WriteLine ( $ "Connected: { args . Namespace } " ) ;
    client . Disconnected += ( sender , args ) => Console . WriteLine ( $ "Disconnected. Reason: { args . Reason } , Status: { args . Status : G } " ) ;
    client . EventReceived += ( sender , args ) => Console . WriteLine ( $ "EventReceived: Namespace: { args . Namespace } , Value: { args . Value } , IsHandled: { args . IsHandled } " ) ;
    client . HandledEventReceived += ( sender , args ) => Console . WriteLine ( $ "HandledEventReceived: Namespace: { args . Namespace } , Value: { args . Value } " ) ;
    client . UnhandledEventReceived += ( sender , args ) => Console . WriteLine ( $ "UnhandledEventReceived: Namespace: { args . Namespace } , Value: { args . Value } " ) ;
    client . ErrorReceived += ( sender , args ) => Console . WriteLine ( $ "ErrorReceived: Namespace: { args . Namespace } , Value: { args . Value } " ) ;
    client . ExceptionOccurred += ( sender , args ) => Console . WriteLine ( $ "ExceptionOccurred: { args . Value } " ) ;
    
    client . On ( "login" , ( ) =>
    {
        Console . WriteLine ( "You are logged in." ) ;
    } ) ;
    client . On ( "login" , json =>
    {
        Console . WriteLine ( $ "You are logged in. Json: " { json } " " ) ;
    } ) ;
    client . On < ChatMessage > ( "login" , message =>
    {
        Console . WriteLine ( $ "You are logged in. Total number of users: { message . NumUsers } " ) ;
    } ) ;
    client . On < ChatMessage > ( "user joined" , message =>
    {
        Console . WriteLine ( $ "User joined: { message . Username } . Total number of users: { message . NumUsers } " ) ;
    } ) ;
    client . On < ChatMessage > ( "user left" , message =>
    {
        Console . WriteLine ( $ "User left: { message . Username } . Total number of users: { message . NumUsers } " ) ;
    } ) ;
    client . On < ChatMessage > ( "typing" , message =>
    {
        Console . WriteLine ( $ "User typing: { message . Username } " ) ;
    } ) ;
    client . On < ChatMessage > ( "stop typing" , message =>
    {
        Console . WriteLine ( $ "User stop typing: { message . Username } " ) ;
    } ) ;
    client . On < ChatMessage > ( "new message" , message =>
    {
        Console . WriteLine ( $ "New message from user " { message . Username } " : { message . Message } " ) ;
    } ) ;
	
    await client . ConnectAsync ( new Uri ( "wss://socketio-chat-h9jt.herokuapp.com/" ) ) ;

    await client . Emit ( "add user" , "C# H.Socket.IO Test User" ) ;

    await Task . Delay ( TimeSpan . FromMilliseconds ( 200 ) ) ;

    await client . Emit ( "typing" ) ;

    await Task . Delay ( TimeSpan . FromMilliseconds ( 200 ) ) ;

    await client . Emit ( "new message" , "hello" ) ;

    await Task . Delay ( TimeSpan . FromMilliseconds ( 200 ) ) ;

    await client . Emit ( "stop typing" ) ;

    await Task . Delay ( TimeSpan . FromSeconds ( 2 ) ) ;

    await client . DisconnectAsync ( ) ;
}

名称空间

 // Will be sent with all messages(Unless otherwise stated).
// Also automatically connects to it.
client . DefaultNamespace = "my" ;

// or

// Connects to "my" namespace.
await client . ConnectAsync ( new Uri ( LocalCharServerUrl ) , namespaces : "my" ) ;
// Sends message to "my" namespace.
await client . Emit ( "message" , "hello" , "my" ) ;

自定义参数

 await client . ConnectAsync ( new Uri ( $ "wss://socketio-chat-h9jt.herokuapp.com/?access_token= { mAccessToken } " ) ) ;

现场示例

c#.net小提琴-https://dotnetfiddle.net/fwmpq3
vb.net .net小提琴-https://dotnetfiddle.net/wzidng
测试socket.io服务器的http客户端-https://socket-io-chat.now.sh/

使用的文档

socket.io协议-https://github.com/socketio/socket.io-protocol
Engine.io协议-https://github.com/socketio/engine.io-protocol

socket.io的Python实施-https://github.com/miguelgrinberg/python-socketio/blob/master/socketio/
Python实施Engine.io -https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/

联系人

  • 邮件
下载源码

通过命令行克隆项目:

git clone https://github.com/HavenDV/H.Socket.IO.git