有人正在为我们构建原生聊天应用程序,而 Websockets 似乎是实现应用程序和我们的服务器(使用 Web API)之间同步的方式。
我们研究了 SignalR,但它似乎需要 jQuery,因此在本机应用程序中会很麻烦。
是否有一种“纯粹”且简单的方法可以在 C# 中使用可扩展的 Websockets?通过“简单”,我的意思是像开始使用 Web API 一样简单(我见过一些例子,你必须创建一个 TCP 侦听器并遵守最新的 RFC 规范等 - 在我看来并不简单),并且通过“可扩展”我的意思是不阻塞线程。
编辑:问题标题重命名以放大 websocket 服务器实现的重要性
SignalR 非常适合以下情况:
1) 如果 websockets 不可用,您需要回退
和
2)您可以控制客户端的实现(客户端必须遵循特定的协议)
我能想到的最简单的方法是Microsoft.WebSockets,从你告诉我们的项目(客户端实现的有限控制,仅 websocket 服务器实现,Web API)。
您可以从 NuGet安装Microsoft.WebSockets,并在几分钟内启动并运行 websocket 服务器。那里有一些教程(例如:https : //dejanstojanovic.net/aspnet/2014/june/database-change-notifications-in-aspnet-using-websocket/),但本质上:
1) 确保您的 IIS 启用了 websockets
2) 创建一个处理 websocket 请求的 Web API 控制器。前任。:
using System;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using Microsoft.Web.WebSockets;
public class SomeController : ApiController
{
// Has to be called something starting with "Get"
public HttpResponseMessage Get()
{
HttpContext.Current.AcceptWebSocketRequest(new SomeWebSocketHandler());
return Request.CreateResponse(HttpStatusCode.SwitchingProtocols);
}
class SomeWebSocketHandler : WebSocketHandler
{
public SomeWebSocketHandler() { SetupNotifier(); }
protected void SetupNotifier()
{
// Call a method to handle whichever change you want to broadcast
var messageToBroadcast = "Hello world";
broadcast(messageToBroadcast);
}
private static WebSocketCollection _someClients = new WebSocketCollection();
public override void OnOpen()
{
_someClients.Add(this);
}
public override void OnMessage(string message)
{
}
private void broadcast(string message)
{
_someClients.Broadcast(msg);
SetupNotifier();
}
}
}
Run Code Online (Sandbox Code Playgroud)
该SetupNotifier()方法应包含捕获您要对其做出反应的更改的逻辑。broadcast(string message)(当然可以重命名)包含将数据“返回”给客户端的逻辑 - 此示例向所有客户端发送相同的消息。
确保使用适当的 websocket 客户端对此进行测试(如果您想要易用性,可以使用 Chrome 扩展) - 您不能ws://按原样在浏览器中执行请求。
| 归档时间: |
|
| 查看次数: |
8212 次 |
| 最近记录: |