我一直在研究一个对我来说不寻常的rails项目,因为它不会使用MySQL数据库,而是使用mongoDB + Redis.
该应用程序非常简单 - 从mongoDB到Redis的"启动"数据,之后rails将准备好接收来自用户的请求,这些请求主要包括从redis中提取数据,(我被告知它非常快速这个)快速计算并将一些数据发送回用户.这将每秒发生~1500-4500次,运气好的话.
在用户军队的威力下降到服务器之前,我想知道是否有办法在内部以某种方式"模拟"页面请求 - 比如运行rake任务以简单地每秒执行该页面N次或类似的东西?
如果没有,是否有办法测试该负载,然后对请求进行计时,以大致了解大多数用户将要查看的延迟?
有时在处理API响应时,我最终会写一些类似于:
what_i_need = response["key"]["another key"]["another key 2"]
Run Code Online (Sandbox Code Playgroud)
问题是,如果"another key"丢失,它会抛出一个错误.我不喜欢那样.如果我是一个很多快乐what_i_need翻了nil,如果沿着过程的东西坏了.
是否有比以下更优雅的解决方案:
what_i_need = nil
begin
what_i_need = response["key"]["another key"]["another key 2"]
rescue Exception => e
end
Run Code Online (Sandbox Code Playgroud)
我还考虑过猴子修补NilClass你尝试访问nil["something"]它会返回nil,但我不确定这是否是最好的方式来解决它,如果它甚至可能.
在非常繁重的负载下,服务器似乎无法足够快地“回收” TCP连接。
我正在研究使用Docker通过在一台机器上创建节点服务器的多个实例而不是使用多台机器来处理对API的每秒更高数量的请求。
如果设置了以下sysctl设置,则回收似乎确实更快了,但是仍然存在对多少个套接字的硬限制:
net.ipv4.ip_local_port_range='1024 65000'
net.ipv4.tcp_tw_reuse='1'
net.ipv4.tcp_fin_timeout='15
Run Code Online (Sandbox Code Playgroud)
当运行多个Docker实例时,TCP连接的总上限是否仍等于“父”计算机可以处理的最大TCP连接数?
0.1 + 0.2
// => 0.30000000000000004
0.2 + 0.2
// => 0.4
0.3 + 0.2
// => 0.5
Run Code Online (Sandbox Code Playgroud)
我知道这与浮点有关,但这里到底发生了什么?
根据@Eric Postpischil 的评论,这不是重复的:
那只涉及为什么“噪音”出现在一个附加项中。这个人问为什么“噪音”出现在一个加法中而没有出现在另一个加法中。这在另一个问题中没有回答。因此,这不是重复的。事实上,差异的原因并不是浮点运算本身,而是ECMAScript 2017 7.1.12.1 step 5
首页:
...
<script>
if (window.addEventListener) {
// addEventListener equivalent of code below
} else if (window.attachEvent) {
window.attachEvent("message", function(e) {
if (e.origin != "page2.html") { return; }
alert(e.data);
});
}
</script>
<iframe src="page2.html"></iframe>
Run Code Online (Sandbox Code Playgroud)
page2.html:
<script>
var message = "hello!";
parent.postMessage(message, '*');
</script>
Run Code Online (Sandbox Code Playgroud)
此代码在Chrome,FF和Opera中运行良好.当然,IE有自己的做事方式,所以尽管使用了自己的代码,这些代码仍无法正常工作.attachEvent.
page2.html实际上是另一个域的页面; 我正在发送正确的P3P标头(应该没关系,但就是这样).
我如何找出为什么postMessage似乎没有到达父页面?
function firstFunction(num, callback) {
callback(num);
};
function secondFunction(num) {
return num + 99;
};
console.log(firstFunction(56, secondFunction));
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)undefined
如果我console.log从内部调用secondFunction,它将返回值.
为什么不?如果我无法从中获取值以便稍后使用,那么设置回调的重点是什么?我错过了什么.
function one(num, callback) {
return callback(num);
};
function two(num) {
// return num + 99; << this works
setTimeout(function() { return num + 99; }, 1000); // << this doesn't
};
console.log(one(55, two));
Run Code Online (Sandbox Code Playgroud)
setTimeout中返回的结果是未定义的.我可以看到它为什么会发生,但我不知道如何避免它.
我有一些函数,我require在node.js,我想传递一个redis对象来获取/设置一些数据,如果我最终使用某种类型的回调,这可能会复制这种情况.
有没有办法恢复这个价值?
我之前尝试过使用Resque并遇到了彻底的失败.我正在重新审视它,结果相同......
resque.rake:
require "resque/tasks"
task "resque:setup" => :environment
Run Code Online (Sandbox Code Playgroud)
test.rb:
require 'resque'
class FileWorker
@queue = :save_to_file
def self.perform(str)
File.open('./' + Time.now.to_s + '.txt', 'w+') do |f|
f << "test 123"
end
end
end
Resque.enqueue(FileWorker, "12345567".split('').shuffle.join)
Run Code Online (Sandbox Code Playgroud)
Gemfile:
gem 'resque'
gem 'rake'
Run Code Online (Sandbox Code Playgroud)
看起来像test.rb自己运行成功地排队工作:

但是,rake resque:work QUEUE='*'在同一文件夹中运行会导致警告,
警告:现在不推荐使用这种信号处理方式.有关详细信息,请参阅http://hone.heroku.com/resque/2012/08/21/resque-signals.html.
以及添加到"失败"队列的任务以及以下原因: "exception":"NameError","error":"uninitialized constant FileWorker"
我如何让它工作?看起来很明显,但有很多关于Resque的教程跨越多年 - 有些痛苦地过时了,没有一个解释如何运行工人,所以他们不会失败.
提前致谢.
假设我想将几个大文件合并成一个,然后再合并uniq! 一个(仅此一项可能需要一秒钟)
我的理解是File.readlines()将所有行加载到内存中。有没有办法逐行读取它,有点像 node.jspipe()系统的工作原理?
Nuxt 使用 asyncData 在服务器端运行代码,然后将其与数据对象合并。
我想拨打电话,要求我知道用户的 IP。我看到我可以到达req确实拥有它的对象,但它深埋在那里,我担心这不是一种可靠的方法。
如何在服务器端而不是客户端访问主叫用户的 IP 地址?
javascript ×5
performance ×3
ruby ×3
callback ×2
heroku ×2
background ×1
docker ×1
file ×1
filesystems ×1
geolocation ×1
hash ×1
memory ×1
mongodb ×1
node.js ×1
nuxt.js ×1
precision ×1
redis ×1
resque ×1
sinatra ×1
sockets ×1
tcp ×1
vue.js ×1