NetGain

为 Stack Overflow 提供支持的高性能 websocket 服务器库。「A high performance websocket server library powering Stack Overflow.」

Github stars Tracking Chart

Welcome to StackExchange.NetGain!

Warning: reduced maintenance

A few things have changed since this library was written:

  • "pipelines" have become the new hotness for high performance low overhead IO code - see my 3-and-a-bit-part series here
  • "Kestrel", combined with pipelines, now provides a great hosting experience for high volume servers
  • HTTP/2 (and above) have reduced the usefulness of web-sockets (one of the main drivers for me and NetGain), since the web-sockets drafts for HTTP/2 never really "took"

As of late 2018, Stack Overflow (Stack Exchange) have migrated away from NetGain, instead using Kestrel's inbuilt web-socket support over HTTP/1.*; it is entirely possible that as we delve more into HTTP/2, we look more in the direction of SSE (EventSource).

So: we're not actively working with, or working on, this library. If you have a burning desire to take it further as an official maintainer (perhaps with some tweaks to naming, obviously) - let me know!


NetGain supports:

  • RFC 6455
  • all draft versions of the RFC (between hixie-76 and v13, aka RFC 6455)
  • hixie-76/hybi-00
  • fixes for various browsers with slightly broken implementations

Build

StackExchange.NetGain is built as a single assembly, StackExchange.NetGain.dll.

StackExchange.NetGain is available on the [NuGet Gallery]

  • [NuGet Gallery: stackexchange.netgain]

You can add StackExchange.NetGain to your project with the NuGet Package Manager, by using the following command in the Package Manager Console.

PM> Install-Package StackExchange.NetGain

WebSocket Server Example

using System;
using System.Net;
using StackExchange.NetGain;
using StackExchange.NetGain.WebSockets;

namespace Example
{
  public class Program
  {
    public static void Main (string[] args)
    {
		IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 6002);
		using(var server = new TcpServer())
		{
			server.ProtocolFactory = WebSocketsSelectorProcessor.Default;
			server.ConnectionTimeoutSeconds = 60;
			server.Received += msg =>
			{
				var conn = (WebSocketConnection)msg.Connection;
				string reply = (string)msg.Value + " / " + conn.Host;
				Console.WriteLine("[server] {0}", msg.Value);
				msg.Connection.Send(msg.Context, reply);
			};
			server.Start("abc", endpoint);
			Console.WriteLine("Server running");

			Console.ReadKey();
		}
		Console.WriteLine("Server dead; press any key");
		Console.ReadKey();
      }
    }
  }
}

Main metrics

Overview
Name With OwnerStackExchange/NetGain
Primary LanguageC#
Program languageC# (Language Count: 3)
Platform
License:MIT License
所有者活动
Created At2015-04-25 00:05:02
Pushed At2019-01-08 17:08:20
Last Commit At2019-01-08 17:08:15
Release Count0
用户参与
Stargazers Count0.9k
Watchers Count81
Fork Count144
Commits Count40
Has Issues Enabled
Issues Count19
Issue Open Count14
Pull Requests Count2
Pull Requests Open Count1
Pull Requests Close Count1
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private