https://github.com/statianzo/fleck
C# Websocket Implementation
https://github.com/statianzo/fleck
c-sharp dot-net hacktoberfest websocket
Last synced: 14 days ago
JSON representation
C# Websocket Implementation
- Host: GitHub
- URL: https://github.com/statianzo/fleck
- Owner: statianzo
- License: mit
- Created: 2010-10-22T02:35:09.000Z (over 14 years ago)
- Default Branch: master
- Last Pushed: 2024-07-03T08:18:44.000Z (10 months ago)
- Last Synced: 2025-04-03T06:32:30.516Z (22 days ago)
- Topics: c-sharp, dot-net, hacktoberfest, websocket
- Language: C#
- Homepage:
- Size: 4.55 MB
- Stars: 2,366
- Watchers: 133
- Forks: 590
- Open Issues: 81
-
Metadata Files:
- Readme: readme.markdown
- License: LICENSE
Awesome Lists containing this project
README
Fleck
===[](https://ci.appveyor.com/project/statianzo/fleck/branch/master) [](https://www.nuget.org/packages/Fleck/)
Fleck is a WebSocket server implementation in C#. Branched from the
[Nugget][nugget] project, Fleck requires no inheritance, container, or
additional references.Fleck has no dependency on `HttpListener` or `HTTP.sys` meaning that it
will work on Windows 7 and Server 2008 hosts. [WebSocket Remarks - Microsoft Docs](https://docs.microsoft.com/en-us/dotnet/api/system.net.websockets.websocket?redirectedfrom=MSDN&view=netframework-4.5#remarks)Example
---The following is an example that will echo to a client.
```c#
var server = new WebSocketServer("ws://0.0.0.0:8181");
server.Start(socket =>
{
socket.OnOpen = () => Console.WriteLine("Open!");
socket.OnClose = () => Console.WriteLine("Close!");
socket.OnMessage = message => socket.Send(message);
});
```Supported WebSocket Versions
---Fleck supports several WebSocket versions of modern web browsers
- Hixie-Draft-76/Hybi-00 (Safari 5, Chrome < 14, Firefox 4 (when enabled))
- Hybi-07 (Firefox 6)
- Hybi-10 (Chrome 14-16, Firefox 7)
- Hybi-13 (Chrome 17+, Firefox 11+, Safari 6+, Edge 13+(?))Secure WebSockets (wss://)
---Enabling secure connections requires two things: using the scheme `wss` instead
of `ws`, and pointing Fleck to an x509 certificate containing a public and
private key```cs
var server = new WebSocketServer("wss://0.0.0.0:8431");
server.Certificate = new X509Certificate2("MyCert.pfx");
server.Start(socket =>
{
//...use as normal
});
```Having issues making a certificate? See this
[guide to creating an x509](https://github.com/statianzo/Fleck/issues/214#issuecomment-364413879)
by [@AdrianBathurst](https://github.com/AdrianBathurst)SubProtocol Negotiation
---To enable negotiation of subprotocols, specify the supported protocols on
the `WebSocketServer.SupportedSubProtocols` property. The negotiated
subprotocol will be available on the socket's `ConnectionInfo.NegotiatedSubProtocol`.If no supported subprotocols are found on the client request (the
Sec-WebSocket-Protocol header), the connection will be closed.```cs
var server = new WebSocketServer("ws://0.0.0.0:8181");
server.SupportedSubProtocols = new []{ "superchat", "chat" };
server.Start(socket =>
{
//socket.ConnectionInfo.NegotiatedSubProtocol is populated
});
```Custom Logging
---Fleck can log into Log4Net or any other third party logging system. Just override the `FleckLog.LogAction` property with the desired behavior.
```cs
ILog logger = LogManager.GetLogger(typeof(FleckLog));FleckLog.LogAction = (level, message, ex) => {
switch(level) {
case LogLevel.Debug:
logger.Debug(message, ex);
break;
case LogLevel.Error:
logger.Error(message, ex);
break;
case LogLevel.Warn:
logger.Warn(message, ex);
break;
default:
logger.Info(message, ex);
break;
}
};```
Disable Nagle's Algorithm
---Set `NoDelay` to `true` on the `WebSocketConnection.ListenerSocket`
```cs
var server = new WebSocketServer("ws://0.0.0.0:8181");
server.ListenerSocket.NoDelay = true;
server.Start(socket =>
{
//Child connections will not use Nagle's Algorithm
});
```Auto Restart After Listen Error
---Set `RestartAfterListenError` to `true` on the `WebSocketConnection`
```cs
var server = new WebSocketServer("ws://0.0.0.0:8181");
server.RestartAfterListenError = true;
server.Start(socket =>
{
//...use as normal
});
```[nugget]: http://nugget.codeplex.com/