我刚刚在SignalR(https://github.com/SignalR/SignalR)阅读中心,但我无法清楚地知道它是什么。是聊天还是别的什么?
答案 0 :(得分:12)
我没有使用它,但基本上它是用于客户端(javascript,silverlight,.NET)和ASP.NET之间通信的“实时”通信技术。目前有3种“实时”通信方法(思考聊天应用程序):轮询,长轮询和HTML5 WebSockets。 SignalR添加了一个抽象层,并根据浏览器支持和上下文利用所有这三种方法。这是一篇描述3种方法(以及SignalR如何帮助)的文章: http://blog.maartenballiauw.be/post/2011/11/29/Techniques-for-real-time-client-server-communication.aspx
这是Hanselman的一篇文章(以及一个功能正常的演示!),关于如何使用它: http://www.hanselman.com/blog/AsynchronousScalableWebApplicationsWithRealtimePersistentLongrunningConnectionsWithSignalR.aspx
另: http://jordanwallwork.co.uk/2011/10/signalr/
Hub是用于通信的类。在javascript中,您可以使用这样的集线器:
$(function() {
var myConnection = $.connection.myHub;
$.connection.hub.start();
});
在ASP.NET中,您可以这样做:
public class Chat : Hub {
public void Distribute(string message) {
Clients.receive(Caller.name, message);
}
}
这两个片段都来自上面提到的链接。
答案 1 :(得分:5)
您可以将Hub视为Asp.NET MVC控制器,以实现客户端(javascript)与服务器(集线器)之间的持久连接。
在客户端和服务器之间轻松发送不同类型的消息和数据。
参数和返回值在客户端自动与JSON进行序列化。
集线器具有将客户端添加到组的概念,因此您可以使用AddToGroup和RemoveFromGroup方法创建聊天室功能。这样您就可以向特定组中的所有客户发送消息。
我真的建议从GitHub下载代码并查看示例。那里有一个Chat-sample房间(团体)。
答案 2 :(得分:0)
集线器是SignalR的高级API,允许实时客户端到服务器和服务器到客户端RPC over HTTP。集线器支持1对多RPC,例如:所有客户端,客户端组,只有呼叫者等。传输超过以下之一(从最好到最差):WebSocket,服务器发送事件,永久帧,长轮询。
答案 3 :(得分:0)
正在仔细阅读此书,以明确定义集线器是什么,并遇到了这个问题。即使在这里有很多答案,它们似乎也有些陈旧,因为它们没有完全显示出signalR的潜力。
我最近在singalR的帮助下创建了一个推送通知应用程序。
想象一下,发送一个AJAX请求,将数据插入数据库。如果您将侦听器连接到侦听更改的数据库,则可以将有关特定数据库更改的消息从服务器发送到所有连接的用户...换句话说,发生某事的推送通知。
此article很好地说明了如何部分实现这一目标