我正在考虑更新现有网站以使用SignalR.我的站点轮询第三方服务以进行数据更改,对其进行一些魔术,并且客户端每隔几分钟轮询一次以使用任何更新刷新其视图.
SignalR似乎是消除客户端轮询的好方法,但我想知道SignalR如何处理丢弃和重新连接的连接,特别是关于可能已暂停一段时间的移动网络应用程序.它会自动协商并排队在此期间遗漏的任何更新,还是客户端需要在这些情况下从头开始重新同步?我看了,但找不到任何关于此的文档,所以指导将不胜感激.
我想在ASP.NET MVC 3中实现类似facebook的通知系统:将通知发送给特定用户以通知他对其中一个项目的操作.
信号灯适合这种要求吗?如何使用SignalR向特定用户(此用户的所有已打开会话)发送通知?
编辑
好的,这就是我做的
在客户端
$(function () {
// Proxy created on the fly
var chat = $.connection.chat;
var username = '@Html.ViewContext.HttpContext.User.Identity.Name';
// Declare a function on the chat hub so the server can invoke it
chat.addMessage = function (message) {
$('#messages').append('<li>' + message + '</li>');
};
// Start the connection
$.connection.hub.start(function (){
chat.join(username);
});
});
Run Code Online (Sandbox Code Playgroud)
在服务器端
public class Chat : Hub
{
public void Join(string username)
{
AddToGroup(username);
}
}
Run Code Online (Sandbox Code Playgroud)
每次我需要通知控制器中的用户时,我会执行以下操作:
IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients …Run Code Online (Sandbox Code Playgroud) 我已经开始使用typescript,很容易找到angular.js和jquery的声明(d.ts)文件.但是找不到SignalR jquery.
你们能帮助我吗?我可以创建一个界面,extends JQuery但不知怎的,它不起作用......
var hub = $.connection.myHub
Run Code Online (Sandbox Code Playgroud)
它抱怨的connection事情...说"属性'连接'不存在于'JQueryStatic'类型的值"
我是新来的信号r,我正在尝试在c#visual studio 2012中创建一个基本的聊天应用程序,但我收到了以下错误.
The following errors occurred while attempting to load the app.
- No assembly found containing an OwinStartupAttribute.
- The discovered startup type 'SignalRTutorials.Startup, SignalRTutorials, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
conflicts with the type 'Microsoft.VisualStudio.Web.PageInspector.Runtime.Startup, Microsoft.VisualStudio.Web.PageInspector.Runtime, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
Remove or rename one of the types, or reference the desired type directly.
To disable OWIN startup discovery, add the appSetting owin:AutomaticAppStartup with a value of "false" in your web.config.
To specify the OWIN startup Assembly, Class, or Method, add the …Run Code Online (Sandbox Code Playgroud) 我知道SignalR用于使用注入的动脉脚本与客户端浏览器进行通信.我有一个似乎常见的问题,那就是我的浏览器的网络日志中填充了如下所示的条目:
.../arterySignalR /民意调查?运输= longPolling&connectionToken = ...
这告诉我SignalR已经回归到长轮询,而不是使用网络套接字.假设我们有一个支持Web套接字的浏览器,并且该浏览器在localhost上运行,那么SignalR默认不应该使用Web套接字吗?什么可能导致它回归长期民意调查?
我有我的服务器控制台应用:
static void Main(string[] args)
{
string url = "http://localhost:8080";
using (WebApp.Start(url))
{
MyHub hub = new MyHub();
Console.WriteLine("Server running on {0}", url);
var key = Console.ReadLine();
while (key != "quit")
{
hub.Send("Server", key);
}
}
}
public class MyHub : Hub
{
public void Send(string name, string message)
{
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.All.addMessage(name, message);
}
}
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
Run Code Online (Sandbox Code Playgroud)
我的.NET客户端应用程序
static void Main(string[] args)
{
MainAsync().Wait();
Console.ReadLine();
} …Run Code Online (Sandbox Code Playgroud) 我有一个Web应用程序,它在仪表板上有很少的图表.图表的数据在客户端的document.ready函数上获取,调用WCF服务方法.
我想要的是现在在我的应用程序中使用SignalR.我是SignalR的新手.我如何从SignalR Hub调用WCF方法,或者你可以说是不是从服务器提取数据而是希望WCF服务每隔一分钟将数据推送到客户端.
signalR和WCF服务之间是否存在通信方式.
另一种方法可以是强制客户端每分钟从WCF服务请求数据.
任何帮助将非常感激.
我已经做了以下的事情.
我的仪表板页面上的客户端功能
<script src="Scripts/jquery.signalR-2.0.3.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="/signalr/hubs"></script>
<a id="refresh">Refresh</a>
$(function() {
var dashboardHubProxy = $.connection.dashboardHub;
$.connection.hub.start().done(function() {
// dashboardHubProxy.server.refreshClient(parameters);
$("#refresh").click(function() {
dashboardHubProxy.server.refreshClient(parameters);
});
});
dashboardHubProxy.client.refreshChart = function (chartData) {
debugger;
DrawChart(chartData, 'Hourly Call Count For Last ' + Duration + ' Days', '#chartHourly', 'StackedAreaChart');
};
});
Run Code Online (Sandbox Code Playgroud)
我的Dashboard Hub类如下
public class DashboardHub : Hub
{
private readonly ReportService ReportService = new ReportService();
public void RefreshClient(string parameters)
{
var chartData …Run Code Online (Sandbox Code Playgroud) 好吧,我继续使用我的Phonegap应用程序开发处于两难境地:对于实时事件通知,我应该使用Azure Notification Hub还是SignalR?
据我了解,SignalR通过使用Web套接字适用于实时Web应用程序.而通知中心可以轻松地跨多个平台发送推送通知.为了便于回复,让我解释一下我目前拥有的结构以及我的应用程序应该做什么.
应用程序:它基本上是一个用户可以创建组并邀请其他用户的应用程序.用户还可以使组"在线",以便其他用户可以"输入"该组.当该群组在线且用户已进入时,他们可以发送问题,交换消息等.
需求:当用户在组中提问或进入/离开组时,其他用户需要在应用屏幕中看到新用户.我可以在服务器上进行轮询以检查并根据更新UI,但这是现代人不允许的.我对这个主题的搜索引出了两件事:SignalR和NotificationHub.
当前架构:客户端 - >带有backbone.js的PhoneGap应用程序.后端 - >带有实体框架和Azure Sql Server的Asp.NET Web API.
我已经考虑过使用通知集线器和标签了.例如,当用户进入在线组时,它向服务器发送请求以注册"grouplisten:{groupId}"标签.然后,服务器将标记注册到用户的设备,并向标记为"grouplisten:{groupId}"的所有其他设备发出通知,以便其他用户使用最近加入的用户更新UI.此外,当用户离开组时,它向服务器发送请求以删除"grouplisten:{groupId}"标签,并且还通知具有"grouplisten:{groupId}"的设备.但是通过这个简单的例子,看起来这样会变得无法管理.
我正在使用SignalR在非常特定的网络条件下(一个疯狂的代理).所以套接字根本不起作用,我必须使用长轮询.当我刷新页面时,它似乎工作了一段时间,但第一次Disconnect发生了.我正在尝试自动重新连接断开连接的事件和以下模式:
这种行为似乎很奇怪.我能做些什么来改善它吗?
我已经阅读了这些主题:
如何在Android Android Client中使用SignalR
但是.net客户端从SignalR服务器获取数据
我用Android编写了一个与SignalR配合使用的简单聊天系统.
它应该是客户端发送消息(通过SendMessage在服务器上调用方法),服务器应该NewMessage在客户端上调用该方法.
这是我ChatHub用C#编写的类(简化).
public class ChatHub : Hub
{
// Store the clients connections Id
static readonly List<string> _connectedClients;
public override Task OnConnected()
{
// Keep connections id
// This section works fine and when the android device connects to the server,
// Its connection id will stored.
_connectedClients.Add(Context.ConnectionId)
//... other codes
}
public void SendMessage(string message)
{
foreach (var connectionId in _connectedClients)
{
// according to the …Run Code Online (Sandbox Code Playgroud) signalr ×10
asp.net ×3
c# ×3
.net ×2
android ×1
asp.net-mvc ×1
browser-link ×1
chat ×1
cordova ×1
java ×1
long-polling ×1
owin ×1
real-time ×1
typescript ×1
wcf ×1
websocket ×1