【问题标题】:Is SignalR Payload agnostic?SignalR 有效负载是否不可知?
【发布时间】:2012-12-04 14:08:53
【问题描述】:

SignalR 是否支持除包含 JSON 或 BSON 等文本的负载以外的负载。

【问题讨论】:

  • 关于这个话题有什么新的吗? protobuf 作为序列化程序可能值得实现!?
  • @esskar:我将来可能会探索这个,可能作为一个开源项目,但现在不能。食欲似乎很低。值得考虑的一条评论是基于文本的协议在浏览器中得到压缩。
  • 确实如此:但是压缩会耗费时间,并且与 protobuf 相比反序列化 json 更慢 - 至少因为数字在 json 中被编码为字符串。如果需要发送字节,那么还有base64的开销。
  • @esskar:我同意 100%。我现在的折衷方案是移动端的 protobuf 和 JavaScript 的 json。烦人的是,像 BreezeJs 这样的基于 JSON 的库有一些我喜欢的特性(也可以通过 protobuf 实现)......但现在还不行(而且可能不会)。这些天来,我尽量不根据社区做出决定,不仅仅是因为我认为它在技术上更好。

标签: .net signalr signalr-hub signalr.client


【解决方案1】:

开箱即用?否。默认情况下,SignalR 仅支持 JSON。但是,它是开源/框架,您可以很容易地进行小修改(适配器)以支持您自己的其他格式。

【讨论】:

  • 在设计时是否考虑了其他序列化方法?
  • 您可以通过 DependencyResolver 提供自己的序列化程序。当然,他们目前需要实现 IJsonSerializer。您可以稍微修改dependencyresolver以接受ISerializer(您将创建此类),然后根据有效负载类型创建自己的序列化程序。此过程中最困难的部分是修改客户端以接受新格式。目前 SignalR 依赖于 JSON.Net,因此如果您通过 JSON.net 选择支持的格式,它可能会使过程更容易。请记住,使用另一种格式会丢失消息压缩 =)
  • 到目前为止,我只看到了字符串支持,而 ashx 可以支持任何东西。感谢您提及压缩角度。我面临的一个问题是 VS2012 就地替换 v4 程序集。结果,无法在此处安装 VS2012 :( 另外, object Parse(string json, Type targetType) -- 它只接受字符串。byte[] 会很有用。
  • 无法安装 VS2012 绝对是个问题,特别是如果您正在考虑修改 SignalR 源代码。
  • ...并让 byte[] 成为有效载荷?我想看看dependencyresolver。看起来我需要一台额外的开发机器。对社区中其他序列化程序的胃口有什么想法吗?值得做扩展开源吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 2021-01-19
  • 1970-01-01
相关资源
最近更新 更多