【问题标题】:Websocket server on AzureAzure 上的 Websocket 服务器
【发布时间】:2017-07-25 11:44:06
【问题描述】:

我正在尝试在 Azure 上托管一个 websockets 服务器。我有点困惑,希望你能帮助我。

我关注了很多文章,但我的代码与本文中的代码接近:https://azure.microsoft.com/en-us/blog/introduction-to-websockets-on-windows-azure-web-sites/

public void ProcessRequest(HttpContext context)
{
    if (context.IsWebSocketRequest)
    {
        context.AcceptWebSocketRequest(ProcessWS);
    }
}

public bool IsReusable { get { return false; } }

private async Task ProcessWS(AspNetWebSocketContext context)
{
    try
    {
        WebSocket socket = context.WebSocket;
        while (true)
        {
            var url = context.RequestUri;
            ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
            WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);
            if (socket.State == WebSocketState.Open)
            {
                string userMessage = Encoding.UTF8.GetString(buffer.Array, 0, result.Count)
                                            .Trim(new char[] { ' ' }); // We remove the spaces before and after
                // DO SOMETHING
            }
            else
            {
                break;
            }
        }
    }
    catch (Exception e)
    {
        Log.Info("Exception" + e.Message + " >>>" + e.StackTrace);
    }
}

这很好,我可以从我的设备中获取消息并回复它们。

但在某些情况下,我需要向另一台设备发送消息,例如:

设备 A 发送“告诉设备 B 闪烁”

因为它是一个 websockets 服务器,并且设备 B 已经与服务器通信,所以我应该在某个地方与设备 B 建立连接。当设备 A 向我询问时,我可以向设备 B 发送消息。

但是我怎样才能用我的代码来实现呢?如何找到与设备 B 的连接?如果不可能,我应该怎么做?

我希望我的问题被描述得足够让人理解。

谢谢,

【问题讨论】:

    标签: c# azure websocket


    【解决方案1】:

    但是我怎样才能用我的代码来实现呢?如何找到与设备 B 的连接?如果不可能,我应该怎么做?

    根据您的情况,我遵循了有关 webapi-and-websockets 的教程并实现了可以在客户端之间建立连接的my Web API project。下面是测试截图,大家可以参考一下:

    此外,您可以利用 SignalR 并将您的客户端(用户)映射到 signalR 连接。更多详情可以参考Mapping SignalR Users to Connections。另外,您可以参考 git 示例Microsoft.AspNet.SignalR.Samples

    更新:

    在这种情况下你会如何使用 signalR ?

    更简单的方法,我们可以将连接和用户信息保存在内存中,更多细节可以参考In-memory storage。基于这个场景,我写了一个样例项目AspDotNet-SignalR-Chat,大家可以参考,下面是截图供测试:

    【讨论】:

    • 感谢您的回答!但是,您认为使用 Microsoft.Websockets 是否可以,因为它已不再开发?
    • 至少,它现在可以工作,可以满足要求。长期考虑,我建议您使用 SignalR。
    • 在这种情况下你会如何使用signalR?根据这篇文章:stackoverflow.com/questions/25668398/… 不可能从 SignalR 的 WebSocketHandler 继承
    • 使用WebSocketHandler用于自己处理websocket处理。在使用 SignalR 时,您需要遵循它提供的功能。我更新了我对你问题的回答,你可以参考一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 2015-03-21
    • 2021-09-02
    • 2012-11-26
    • 2012-02-28
    • 1970-01-01
    • 2017-12-22
    相关资源
    最近更新 更多