有人正在为我们构建本机聊天应用程序,而Websockets似乎是应用程序与我们的服务器(使用Web API)之间同步的方式。
我们调查了SignalR,但它似乎需要jQuery,因此在本机应用程序中会很麻烦。
在C#中使用可扩展的Websockets是否有“纯粹”且简单的方法?通过“简单”我的意思就像开始使用Web API一样简单(我已经看到了必须创建TCP侦听器并遵守最新RFC规范等的示例 - 在我看来并不简单),以及“可扩展”我的意思是不阻止线程。
编辑:重命名问题标题以扩大实施websocket服务器的重要性
答案 0 :(得分:2)
但这并未完全解决您的问题
我们调查了SignalR,但它似乎需要jQuery,因此会 在原生应用程序中很麻烦
这是不正确的,它实际上支持自托管和各种平台的客户端
有人正在为我们构建本机聊天应用,而Websockets似乎也是如此 是应用程序和我们的服务器之间的同步性的方式 (使用Web API)。
SignalR在可用的情况下使用新的WebSocket传输 必要时回到旧的运输工具。虽然你当然可以 使用SignalR方法直接使用WebSocket编写应用程序 您需要实现的许多额外功能 已经为你完成了。最重要的是,这意味着你 可以编写您的应用程序以利用WebSocket而无需 不必担心为旧客户创建单独的代码路径。 SignalR还可以防止您不必担心更新 WebSocket,因为SignalR将继续更新以支持 基础传输的变化,为您的应用程序提供一个 跨WebSocket版本的一致界面。
虽然只是最后一个想法,但SignalR并不是人类的救星,但它非常轻巧健壮,适合它的本质。但是,您提到过您想要一个针对10000次使用的聊天设置。您可能应首先权衡所有选项,包括第三方解决方案以及WCF等传统服务。
进一步阅读
答案 1 :(得分:2)
SignalR适用于以下情况:
1)如果没有网页套件,你需要一个后备支持
和
2)您可以控制客户端的实现(客户端必须遵循特定的协议)
我能想到的最简单的方法是,你告诉我们关于项目的内容(对客户端实现的有限控制,仅限websocket服务器实现,Web API)是Microsoft.WebSockets。
您可以从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();
}
}
}
SetupNotifier()
方法应该包含捕获您想要做出反应的更改的逻辑。 broadcast(string message)
(当然可以重命名)包含将数据“返回”到客户端的逻辑 - 此示例将相同的消息发送给所有客户端。
请务必使用正确的websocket客户端进行测试(如果您希望使用方便,可以使用Chrome扩展程序) - 您无法按原样在浏览器中执行ws://
次请求。