我最近一直在搜索和阅读SignalR,虽然我看到很多关于Hubs和Persistent Connections之间差异的解释,但是我还没能把我的脑袋放到下一个级别,这就是为什么我会选择一种方法而不是另一种?
Fra*_*len 92
从我在" 连接和集线器"部分中看到的情况看,Hubs似乎提供了覆盖较低级别持久连接的主题系统.
从以下高评价的评论:
部分正确.您也可以在持久连接中获取主题或组.最大的区别是调度不同类型的消息.例如,您有不同类型的消息,并且您希望发送不同类型的有效负载.使用持久连接,您必须在有效负载中嵌入消息类型(请参阅Raw示例),但集线器使您能够通过连接执行RPC(允许您从服务器和服务器到客户端调用客户端上的方法) .另一件大事是模型绑定.集线器允许您将强类型参数传递给方法.
文档中使用的示例使用聊天室隐喻,其中用户可以加入特定房间,然后仅从同一房间中的其他用户获取消息.更通用的是,您的代码订阅了一个主题,然后只获得发布到该主题的消息.通过持久连接,您将获得所有消息.
您可以在持久连接之上轻松构建自己的主题系统,但在这种情况下,SignalR团队已经为您完成了工作.
Lar*_*ner 64
主要的区别是你不能用PersistentConnection做RPC,你只能发送原始数据.所以不要像这样从服务器发送消息
Clients.All.addNewMessageToPage(name, message);
Run Code Online (Sandbox Code Playgroud)
你必须用Connection.Broadcast()或发送一个对象,Connection.Send()然后客户端必须决定如何处理它.例如,您可以发送如下对象:
Connection.Broadcast(new {
method: "addNewMessageToPage",
name: "Albert",
message: "Hello"
});
Run Code Online (Sandbox Code Playgroud)
而在客户端,而不是简单的定义
yourHub.client.addNewMessageToPage = function(name, message) {
// things and stuff
};
Run Code Online (Sandbox Code Playgroud)
你必须添加一个回调来处理所有传入的消息:
function addNewMessageToPage(name, message) {
// things and stuff
}
connection.received(function (data) {
var method = data.method;
window[method](data.name, data.message);
});
Run Code Online (Sandbox Code Playgroud)
您必须在OnReceived方法中在服务器端执行相同类型的调度.您还必须在那里反序列化数据字符串,而不是像使用hub方法那样接收强类型对象.
选择PersistentConnection而非Hubs的原因并不多.我知道的一个原因是可以通过PersistentConnection 发送预序列化的JSON,这是使用集线器无法做到的.在某些情况下,这可能是相关的性能优势.
除此之外,请参阅文档中的引用:
选择沟通模式
大多数应用程序应使用Hubs API.Connections API可用于以下情况:
需要指定发送的实际消息的格式.
开发人员更喜欢使用消息传递和调度模型而不是远程调用模型.
- 使用消息传递模型的现有应用程序正在移植以使用SignalR.
根据您的消息结构,使用PersistentConnection可能会获得小的性能优势.
您可能需要查看SignalR示例,特别是此处.
小智 23
有两种方法可以使用SignalR:您可以通过覆盖它的PersistentConnection类来以较低的级别访问它,这可以让您对它进行大量控制; 或者你可以让SignalR通过使用高级别的"集线器"为你完成所有繁重的工作.
| 归档时间: |
|
| 查看次数: |
44848 次 |
| 最近记录: |