如何使用SuperWebSocket创建一个WebSocket服务器

11
我正在创建一个需要WebSocket通信的应用程序。我只需要一个带有线程可能性的简单的WebSocketServer。我发现SuperWebSocket可以满足我的需求,但是我对C#不熟悉,很难理解代码。有人能向我展示如何创建一个简单的服务器,该服务器应该回显从浏览器/网页发送的消息吗?感谢向我展示一些好的方向、指导或代码的人。我无法从他们的示例代码中找出用法。
编辑:这就是我想要实现的事情。enter image description here 如果有人提供确切的解决方案,我会采纳那个解决方案。
编辑:"Robar"已经给出了直接的答案。这只是我使用它的方式。
this.NewSessionConnected += new SessionEventHandler<WebSocketSession>(this.WebSocketServer_NewSessionConnected);

this.NewDataReceived += new SessionEventHandler<WebSocketSession, byte[]>(this.WebSocketServer_NewDataReceived);

this.NewMessageReceived += new SessionEventHandler<WebSocketSession, string>(this.WebSocketServer_NewMessageReceived);

this.SessionClosed += new SessionEventHandler<WebSocketSession, SuperSocket.SocketBase.CloseReason>(this.WebSocketServer_SessionClosed);

只是想说,SuperWebSocket已经支持多线程了。一个会话与另一个会话是独立的。 - Rushino
有没有办法在SuperWebSocket中使用SSL -> tsl1.2或tsl1.3? - Neelesh
2个回答

4

SuperWebSocket

SuperWebSocket 是一个 C# 实现的 WebSocket 服务器。它提供了高度可扩展和可定制化的 API,可以帮助您轻松地实现 WebSocket 通信。

下面是 Echo 示例 的教程。

Alchemy

如果您愿意尝试其他 C# WebSocket 服务器,可以使用 Alchemy。 Alchemy 的服务端实现非常简单:

static void Main(string[] args) {
  var aServer = new WSServer(8100, IPAddress.Any) {
      DefaultOnReceive = new OnEventDelegate(OnReceive),
      DefaultOnSend = new OnEventDelegate(OnSend),
      DefaultOnConnect = new OnEventDelegate(OnConnect),
      DefaultOnConnected = new OnEventDelegate(OnConnected),
      DefaultOnDisconnect = new OnEventDelegate(OnDisconnect),
      TimeOut = new TimeSpan(0, 5, 0)
  };

  aServer.Start();
}

static void OnConnected(UserContext aContext) {
  Console.WriteLine("Client Connection From : " + aContext.ClientAddress.ToString());
  // TODO: send data back
}

正如他们网站上所提到的,他们有一个简单的聊天示例


Alchemy真的很酷!但是现在它还缺少一些功能。SuperWebSockets可能是目前更好的选择。 - Rushino
@Rushino:没错。SuperWebSockets目前是我们公司项目的完美解决方案。 - Robar
1
太好听了!我刚开始使用它,我觉得它的工作方式真的很棒,而且到目前为止它运行得非常好。所以如果你在公司中使用它,那就证明了我的观点。 - Rushino
这个项目似乎不再得到支持。已经有几个重大问题和拉取请求开放了一年以上。 - Bryan Anderson
@BryanAnderson 是的,没错,Alchemy 似乎已经不再受支持了。截至今天,我建议使用 SignalR 进行 WebSocket 通信。 - Robar

0
class Program
{
    static void Main(string[] args)
    {
        var listener = new TcpListener(IPAddress.Loopback, 8181);
        listener.Start();
        using (var client = listener.AcceptTcpClient())
        using (var stream = client.GetStream())
        using (var reader = new StreamReader(stream))
        using (var writer = new StreamWriter(stream))
        {
            writer.WriteLine("HTTP/1.1 101 Web Socket Protocol Handshake");
            writer.WriteLine("Upgrade: WebSocket");
            writer.WriteLine("Connection: Upgrade");
            writer.WriteLine("WebSocket-Origin: http://localhost:8080");
            writer.WriteLine("WebSocket-Location: ws://localhost:8181/websession");
            writer.WriteLine("");
        }
        listener.Stop();
    }
}

错误,这是一个不完整的握手,没有客户端请求的后续回声。您有更多的代码要发布吗? - simonc
@tuoxie,你的解决方案很好用。但是,当我移除了那个“using”并将“writer”声明为对象时,它就不起作用了。我能知道为什么吗? - prabhakaran
@simonc 剩下的部分是计算SHA1-base64字符串并将其发送给客户端。 - prabhakaran
1
我找到了我的评论的答案。如果我放弃使用,我必须使用“writer.Flush()”。 - prabhakaran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接