如果我有多个页面可以使用多个集线器类,那么管理它的最佳方法是什么?
例如:
导航到网站中的另一个页面并且基本上"重新打开"到上一页打开的同一个集线器类的连接是不是很糟糕?
我是否认为在页面上打开多个集线器连接是正确的,因为它们都在一个连接中统一,即使它们是不同的集线器类?
好吧,我正在尝试执行有关视频流的证明,我正在使用asp.net c#.我有点迷茫,你有什么想法或建议吗?
我意识到这些问题是相似的:
然而,他们已经老了,目前的文件中没有任何内容给我任何关于我是否做正确的事情的线索.
这是问题/问题:
我需要能够从服务器端向所有连接的客户端广播消息,除了提交http请求的人 - 想象有人提交表单并让所有连接到同一表单的人被通知已提交的内容.
我现在这样做的方式是这样的:
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
var connectionID = HttpContext.Request.Cookies["conn-id"].Value;
context.Clients.AllExcept(connectionID).addMessage(message);
Run Code Online (Sandbox Code Playgroud)
每次建立连接时,我都会在客户端的cookie中设置ConnectionID,如下所示:
$.connection.hub.start().done(function(){
$.cookie("conn-id",$.connection.hub.id);
});
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
这是我在这种情况下可以采取的最佳/唯一方法吗?我可以从其他地方读取发起请求的客户端的连接ID,hub.Context.ConnectionID或类似于SessionID从HttpContext.Current.Session.SessionID 获取的方式吗?
例如,可以通过将客户端连接到SessionID来以编程方式设置连接ID吗?这可能由于某种原因导致问题吗?如果是这样,您能否解释一下如何以编程方式设置连接ID以及我需要连接到哪个事件才能执行此操作?
我注意到每次重新加载页面时,连接ID都会更改为不同的guid.如何仅将ConnectionId设置一次并至少在Session的生命周期内维护它?
我一直在构建一个Web服务,到目前为止,它完全由ASP.NET Web API调用组成.我现在需要将SignalR添加到混音中,但我想知道如何保持安全方面的一致性.
我目前正在使用OAuth承载令牌(使用OWIN身份验证),因此我的客户端基本上会有一个access_token,我通常会将其添加到任何Web API调用的标头中.但是,我如何使用SignalR做同样的(或类似的)?我可以在创建连接时或每次通话时进行身份验证吗?而且,最重要的是,我如何首先指定访问令牌?
谢谢.
我正在尝试将SignalR引入我的Android Studio项目.
我成功地遵循了关于SignalR入门的教程,所以现在我有了工作Hub.该教程中的客户端是javascript,我在PC上的网页(在Chrome中)以及在我的家庭LAN上通过WiFi在我的Android手机上运行正常.
然后我去了Android java客户端工作.我已经在Android Studio中安装了一个Android应用程序项目Hub,作为下一步,我想与之进行对话.
我下载了适用于Android的官方Microsoft java客户端,作为zip.
然后我将其解压缩并将其作为项目加载到Android Studio中.它构建没有错误.
问题#1:这个项目只给我一个AAR,而不是一个JAR.我已经想出如何在Android Studio中使用jar,所以如果有一种方法可以在这个时刻创建一个jar,我可能会让这个工作.
此时我将依赖项包含到我的应用程序项目中.readme.md说:
添加signalr-client-sdk.jar,signalr-client-sdk-android.jar gson库作为项目的gradle依赖项.
所以我试着尽可能地跟着它.这是我的build.gradle:
compile 'com.google.code.gson:gson:2.3.1'
compile files('libs/signalr-client-sdk.jar')
compile files('libs/signalr-client-sdk-android-release.aar')
Run Code Online (Sandbox Code Playgroud)
问题2:将aar作为模块导入Android Studio中的app项目后,它仍然没有看到必要的命名空间来使主要语句工作.这是主要声明(Android中SignalR的hello world,编译方式):
Platform.loadPlatformComponent(new AndroidPlatformComponent());
Run Code Online (Sandbox Code Playgroud)
起初,它没有拿起任何东西,然后拿起import microsoft.aspnet.signalr.client.Platform;了Platform.它仍然没有什么线索来import进行AndroidPlatformComponent,所以我坚持,直到我能过去这一点.
如你所知,Android Studio中有很多文件,我不想在我知道你想看哪些文件之前将它们全部喷出来.如果你告诉我你想看哪些文件,我会将它们添加为编辑.
我在MVC4应用程序中使用Visual Studio 2012 Ultimate RC,SignalR 0.5.1和Jquery 1.7.2.
我看过:MVC4 SignalR"signalr/hubs"501未实现错误
但它不会影响我的问题(我使用IIS Express进行调试).
当我尝试使用SignalR时,$ .connection变量是未定义的.我的服务器端代码:
[HubName("tenantHub")]
public class TenantHub : Hub
{
...
void TenantChange(CrudAction action, Tenant tenant)
{
Clients.eventOccurred(action.ToString(), tenant);
}
}
Run Code Online (Sandbox Code Playgroud)
客户端:
$(function() { var test = $.connection.tenantHub; });
Run Code Online (Sandbox Code Playgroud)
SignalR/hubs正在引用客户端,我可以看到JS代码,它不会抛出任何错误.但是引用$ .connection会抛出一个Uncaught TypeError: Cannot read property 'tenantHub' of undefined.还试图做默认的聊天示例,它给出了同样的错误.在VS2012中使用时是不支持SignalR还是我只是愚蠢?
在研究中试过我的运气,但到目前为止还没有快乐.
我想将SignalR javascript客户端连接到自签名的SignalR Windows服务绑定到自签名SSL证书.
我的应用程序在http上工作得很好,但是当Owin WebApplication开始使用https时,客户端会重复断开连接.
以下是我使用SSL配置SignalR所做的工作.
Ran NETSH命令将SSL绑定到端口8080
netsh http add sslcert ipport=0.0.0.0:8080 certhash=123456f6790a35f4b017b55d09e28f7ebe001bd appid={12345678-db90-4b66-8b01-88f7af2e36bf}
Run Code Online (Sandbox Code Playgroud)在自托管HubConnection实例中添加了代码以添加这样的导出SSL(尽管这应该无关紧要,因为它是无法连接的客户端):
if (File.Exists("MyCert.cer")
&& Settings.GetSetting(Settings.Setting.SrProtocol).Equals("https", StringComparison.InvariantCultureIgnoreCase))
connection.AddClientCertificate(X509Certificate.CreateFromCertFile("MyCert.cer"));
Run Code Online (Sandbox Code Playgroud)使用https启动Owin WebApplication(这应该在http.sys中创建绑定)
string registerUrl = string.Format("{0}://SOME.WHERE.COM:{1}", Service.Server.SrProtocol, Service.Server.SrPort);
WebApp.Start<StartUp>(registerUrl);
Run Code Online (Sandbox Code Playgroud)在SignalR 2.0文档中,它说:
要启动Web服务器,请调用WebApplication.Start(endpoint).您现在应该可以在浏览器中导航到端点/信号器/集线器.
当我浏览到URL http://SOME.WHERE.COM:8080/signalr/hubs时,我成功接收到驱动SignalR的javascript.
当我浏览到URL https://SOME.WHERE.COM:8080/signalr/hubs我没有成功,我收到"使用FF重置了与服务器的连接".
我考虑过的一些额外观点:
NETSH SHOW表示网址已注册
URL group ID: E300000240000022
State: Active
Request queue name: Request queue is unnamed.
Properties:
Max bandwidth: inherited
Max connections: inherited
Timeouts:
Timeout values inherited
Number of registered URLs: 1
Registered URLs: HTTPS://SOME.WHERE.COM:8080/
Run Code Online (Sandbox Code Playgroud)NETSH SHOW表示SSL证书绑定到8080: …
TypeScript 只能用于创建SignalR Web应用程序,还是我们必须使用jQuery?或者是SignalR的TypeScript版本?
我使用ASP.NET MVC和C#.我发现SignalR实时传输数据,但signalR有一些限制.
使用背板时,最大消息吞吐量低于客户端直接与单个服务器节点通信时的吞吐量.这是因为背板将每条消息转发到每个节点,因此背板可能成为瓶颈.此限制是否存在问题取决于应用程序.例如,以下是一些典型的SignalR场景:
我的项目需要高频实时(例如,实时游戏).
我还需要实时视频聊天
我的情景:
我有一个主服务器和多个从服务器,客户端连接到从服务器和ans从服务器连接到主服务器.
示例:服务器Slave-1和服务器Slave-2连接到主服务器,客户端A和客户端B连接到Slave-1,客户端C和客户端D连接到Slave-2,
客户端-A发送消息或数据或与客户端-D进行实时聊天
我如何实现这种情况?
[更新-1]
如果我没有使用signalR来解决这个问题,那么我应该使用什么?
[更新-2]
在我的场景中,主服务器就像一个路由器,而奴隶服务器就像一个交换机.连接到交换机和交换机的客户端连接到路由器.如果客户端-A发送数据包到客户端C,数据包应该发送到路由器和路由器处理数据包.超过2000个可能数量的从服务器和每个服务器的用户数量它超过10,000.
谢谢.
在ASP.NET Web API应用程序中使用原始websockets的首选方法是什么?
我们想在ASP.NET Web API应用程序的几个接口上使用二进制 WebSockets.我很难确定应该如何完成这项工作,因为.NET似乎存在多个在线冲突和/或过时的实现.
有这似乎是ASP.NET这样的例子一个,但我认为必须有在Web API框架内使用WebSockets的手段.据我所知,你可以在WebAPI中使用Signalr.
我以为使用Microsoft.AspNet.SignalR.WebSockets.WebSocketHandler会起作用,但我不确定如何将WebSocketHandler链接到Controller ......
class MyServiceController : ApiController
{
[HttpGet]
public HttpResponseMessage SwitchProtocols (string param)
{
HttpContext currentContext = HttpContext.Current;
if (currentContext.IsWebSocketRequest ||
currentContext.IsWebSocketRequestUpgrading)
{
// several out-dated(?) examples would
// use 'new MySocketHandler' for ???
var unknown = new ????
currentContext.AcceptWebSocketRequest(unknown);
return Request.CreateResponse(HttpStatusCode.SwitchingProtocols);
}
}
}
class MySocketHandler : WebSocketHandler
{
public MySocketHandler(): base(2048){}
...
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,AcceptWebSocketRequest不再接受WebSocketHandler,而是它的新签名是......
public void AcceptWebSocketRequest(Func<AspNetWebSocketContext, Task> userFunc)
Run Code Online (Sandbox Code Playgroud)
有没有人在ASP.NET Web API应用程序中有最新的实现原始websockets的链接或快速示例?