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<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();
}\”>
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/
联系人
- 邮件
