小编Mik*_*keL的帖子

使用Jbuilder(或其他)Rails JSON API布局

在我的rails 3.2应用程序中,我使用jbuilder来呈现来自我的JSON api的响应.

我想为所有API响应提供一个通用结构,并且布局可能是保持我的视图DRY的可能解决方案.

例如:我希望每个回复都是以下形式:

{
  status: "ok|error|redirect",
  data:   { ... JSON specific to the current view ... },
  errors: [ ... ],
  notes:  [ ... ]
}
Run Code Online (Sandbox Code Playgroud)

(其中数据的值是视图提供的json结构,其他所有内容都来自布局)

但是:我无法正确地让jbuilder布局屈服于视图.

# in layout 
json.data yield

# in view
json.some "value"
Run Code Online (Sandbox Code Playgroud)

结果是:

{"data":"{\"some\":\"value\"}"}  # arg! my json has become a string
Run Code Online (Sandbox Code Playgroud)

以另一种方式尝试:

# in layout 
yield

# in view
json.data do |json|
  json.some "value"
end
Run Code Online (Sandbox Code Playgroud)

结果是 :

{}
Run Code Online (Sandbox Code Playgroud)

有没有人用jbuilder或其他json模板gem /方法做到这一点?

这个juilder github问题表明这是可能的,但表明其他人也有类似的问题.

我看到rabl(https://github.com/nesquena/rabl/)应该支持布局(https://github.com/nesquena/rabl/wiki/Using-Layouts),但我决定不使用由于其他原因(rabl使复杂的json结构成为一场噩梦,特别是在试图控制对象根等时).

layout json ruby-on-rails jbuilder

9
推荐指数
3
解决办法
8417
查看次数

Node.JS TCP上的无限并发/流背压

据我所知,Node的事件IO模型的一个后果就是无法告诉Node进程(例如)通过TCP套接字接收数据,阻止,一旦你连接了接收事件处理程序(或者否则开始收听数据).

如果接收器无法足够快地处理传入数据,则可能导致"无限并发",从而节点内的节点继续尽可能快地从套接字读取数据,在事件循环上调度新数据事件而不是阻塞在套接字上,直到进程最终耗尽内存并死掉.

接收方无法告诉节点减慢其读取速度,否则将允许TCP的内置流量控制机制启动并向发送方指示它需要减速.

首先,到目前为止我所描述的是准确的吗?有没有我错过了允许节点避免这种情况的东西?

Node Streams备受推崇的功能之一是自动处理背压.

AFAIK,可写流(tcp套接字)可以告诉它是否需要减速的唯一方法是查看socket.bufferSize(指示写入套接字但尚未发送的数据量).鉴于接收端的节点总是尽可能快地读取,这只能表明发送方和接收方之间的网络连接速度慢,而不是指示接收方是否无法跟上.

那么其次,Node Streams能否以某种方式自动反压在这种情况下处理无法跟上的接收器?

似乎这个问题影响浏览器通过websockets接收数据,原因类似于websockets API没有提供一种机制来告诉浏览器减慢从套接字读取的速度.

Node(以及使用websockets的浏览器)在应用程序级别实现手动流量控制机制,以明确告诉发送进程减速是唯一的解决方案吗?

stream node.js backpressure

9
推荐指数
1
解决办法
1786
查看次数

标签 统计

backpressure ×1

jbuilder ×1

json ×1

layout ×1

node.js ×1

ruby-on-rails ×1

stream ×1