Azure 上的 Websocket 服务器
Posted
技术标签:
【中文标题】Azure 上的 Websocket 服务器【英文标题】:Websocket server on Azure 【发布时间】: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 的连接?如果不可能,我应该怎么做?
我希望我的问题被描述得足够让人理解。
谢谢,
【问题讨论】:
【参考方案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?根据这篇文章:***.com/questions/25668398/… 不可能从 SignalR 的 WebSocketHandler 继承 使用WebSocketHandler
用于自己处理websocket处理。在使用 SignalR 时,您需要遵循它提供的功能。我更新了我对你问题的回答,你可以参考一下。以上是关于Azure 上的 Websocket 服务器的主要内容,如果未能解决你的问题,请参考以下文章
Azure web appservice 上的 Python websocket 支持?
SignalR Core 未在 Azure 应用服务中使用 Websocket