一、NetCoreServer介绍
超快速、低延迟的异步套接字服务器和客户端 C# .NET Core 库,支持 TCP、SSL、UDP、HTTP、HTTPS、WebSocket 协议和 10K 连接问题解决方案。
开源地址:https://github.com/chronoxor/NetCoreServer
支持:
Example: TCP chat server
Example: TCP chat client
Example: SSL chat server
Example: SSL chat client
Example: UDP echo server
Example: UDP echo client
Example: UDP multicast server
Example: UDP multicast client
Example: Unix Domain Socket chat server
Example: Unix Domain Socket chat client
Example: Simple protocol
Example: Simple protocol server
Example: Simple protocol client
Example: HTTP server
Example: HTTP client
Example: HTTPS server
Example: HTTPS client
Example: WebSocket chat server
Example: WebSocket chat client
Example: WebSocket secure chat server
Example: WebSocket secure chat client
本文重点学习WebSocket通讯
二、服务端及双客户端代码
2.1 服务端控制台
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using NetCoreServer;
namespace WsChatServer
{
class ChatSession : WsSession
{
public ChatSession(WsServer server) : base(server) {
}
public override void OnWsConnected(HttpRequest request)
{
Console.WriteLine($"Chat WebSocket session with Id {
Id} connected!");
// Send invite message
string message = "Hello from WebSocket chat! Please send a message or '!' to disconnect the client!";
SendTextAsync(message);
}
public override void OnWsDisconnected()
{
Console.WriteLine($"Chat WebSocket session with Id {
Id} 已断开!");
}
public override void OnWsReceived(byte[] buffer, long offset, long size)
{
string message = Encoding.UTF8.GetString(buffer, (int)offset, (int)size);
Console.WriteLine("来自: " + message);
// Multicast message to all connected sessions
((WsServer)Server).MulticastText(message);
// If the buffer starts with '!' the disconnect the current session
if (message == "!")
Close();
}
protected override void OnError(SocketError error)
{
Console.WriteLine($"Chat WebSocket session caught an error with code {
error}");
}
}
class ChatServer : WsServer
{
public ChatServer(IPAddress address, int port) : base(address, port) {
}
protected override TcpSession CreateSession() {
return new ChatSession(this); }
protected override void OnError(SocketError error)
{
Console.WriteLine($"错误 {
error}");
}
}
class Program
{
static void Main(string[] args)
{
// WebSocket server port 服务端口
int port = 9999;
if (args.Length > 0)
port = int.Parse(args[0]);
// WebSocket server content path
string www = "../../../../../www/ws";
if (args.Length > 1)
www = args[1];
Console.WriteLine($"WebSocket 服务端口: {
port}");
Console.WriteLine($"WebSocket server static content path: {
www}"