【问题标题】:How to create a WebSocket server using SuperWebSocket如何使用 SuperWebSocket 创建 WebSocket 服务器
【发布时间】:2012-03-30 14:17:17
【问题描述】:

我正在创建一个需要 WebSocket 通信的应用程序。我所需要的只是一个具有线程可能性的简单 WebSocketServer。我发现 SuperWebSocket 可以满足我的需求。但是,我对 C# 的不熟悉给理解代码带来了麻烦。谁能告诉我如何创建一个简单的服务器,它应该回显从浏览器/网页发送的消息。我将非常感谢提供一些好的方向||指导||代码的人。我无法从他们的示例代码中找出用法。

编辑: 这是我想要达到的目标。

如果有人说一个确切的解决方案,我会采用那个。

编辑: “罗巴”已经给出了直接的答案。这就是我如何使用它。

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 已经是多线程的了。一个会话独立于另一个会话。
  • 有什么方法可以使用 SSL -> tsl1.2 或 tsl1.3 与 SuperWebSocket?

标签: c# javascript windows sockets websocket


【解决方案1】:

SuperWebSocket

Echo example教程

炼金术

如果您对其他 C# WebSocket 服务器开放,您可以使用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
}

正如他们网站上提到的,他们有一个简单的chat example

【讨论】:

  • 炼金术真的很酷!不幸的是,它现在缺少一些功能。 SuperWebSockets 可能是目前更好的选择。
  • @Rushino:没错。 SuperWebSockets目前是我们公司项目的完美解决方案。
  • 很高兴听到!我刚开始使用它,我认为它的工作方式真的很棒,而且到目前为止效果很好。因此,如果您在公司中使用它来证明我的观点。
  • 这个项目似乎不再受支持了。有几个主要问题和拉取请求开放一年+。
  • @BryanAnderson 是的,没错,Alchemy 似乎不受支持。从今天开始,我会推荐 SignalR 用于 WebSocket 通信。
【解决方案2】:
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();
    }
}

【讨论】:

  • 错误,这是一次不完整的握手,以后没有客户端请求的回显。您还有更多代码要发布吗?
  • @tuoxie 您的解决方案运行良好。但是,当我删除“使用”并将“作者”声明为对象时,它不起作用。我能知道为什么吗?
  • @simonc 剩下的部分是计算 sha1-base64 字符串并将其发送给客户端。
  • 我找到了我评论的答案。如果我放弃使用,我必须使用“writer.Flush()”。
猜你喜欢
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 2019-12-02
  • 2016-07-16
相关资源
最近更新 更多