我有一个Rails webapp[部署在Heroku上],它使用Heroku的rake:cron特性重复地对其他站点进行一系列HTTP调用。目前的情况并不理想;rake:cron进程在单个线程中执行,这意味着HTTP调用是按顺序进行的;这就意味着,对同一个站点的呼叫间隔很长[通常为2分钟]
我希望并行执行这个过程,并将调用之间的时间减少到10秒。看过凯文·史密斯的《实践中的Erlang》后,我开始考虑使用Erlang作为替代后端。我想弄清楚的是,我是应该a)用Erlang、前端和all重新编写整
我正在使用dbg:p(client,r)运行以下代码:
它与我用gen_tcp和gen_服务器编写的服务器通信,如下所示。我的主要问题是,我不能可靠地接收所有的消息。有时候我会
(<0.2.0>) << {tcp,#Port<0.517>,
<<131,104,6,100,0,4,99,97,114,100,100,0,7,117,110,107,110,
111,119,
我目前正在Erlang的BitTorrent客户端上工作。目前,我正在尝试请求块,然后构建
从下载的块中验证一个片段。只要你愿意,一切都能正常工作
它不是最后一件(与另一件尺寸不同)
件)。似乎最后一篇文章已经下载了,但我看不出来
将其哈希值与从
种子文件。我想我不是在寻求解决办法,但是
如果有什么特别的事情我应该牢记在心
当谈到最后一块的散列时。有吗?没有。最后一个片段与其他片段一样被散列,尽管它更小
我猜你在正确处理最后一块和/或最后一块时有一个bug。一种方法是,如果浏览代码失败,可以测试
我对我的速度计划的不同部分进行基准测试感兴趣。我尝试过使用info(statistics)和erlang:now()
我需要知道到微秒的平均速度是多少。我不知道为什么我写的剧本有问题
它应该能够从任何地方开始,在任何地方结束。当我尝试在一个可能并行运行四次的进程上启动它时,我遇到了一个问题
有没有人已经找到了这个问题的解决方案
编辑:
如果有人能提供剧本,愿意提供赏金。它需要通过“多进程”生成。我不能接受计时器这样的功能。。至少在我看到的实现中。它只遍历一个进程,即使是这样,对完整程序进行完整测
我注意到[H | T]=[1]。成功,但[H | T]=[]失败。我想这就是它的工作原理,但是有什么原因设计师没有选择让这种模式匹配成功并导致分配H=[]和t=[]
9> [H|T] = [1].
[1]
10> H.
1
11> T.
[]
12> [H|T] = [].
** exception error: no match of right hand side value []
如果[H | T]将[]与H=T=[]]匹配,则使用模式匹配将无法区分[[]]与[]
我正在实施一个停车场,有两个入口门和一个可以离开停车场的入口门。对我来说,一切看起来都很好,但我会犯这样的错误
Error in process <0.84.0> with exit value: {badarg,[{parking,car,2},{random,uniform,0}]}
有人能帮我吗?我学了几天二郎,不知道这里出了什么问题
提前感谢,,
Radek您发布的示例在spawn/3调用中使用了错误的模块:
spawn(parking, parkingLoop, [Slo
我想使用Erlang和Thrift创建一个Windows服务
该服务将有一个单线程在端口(套接字通信)中侦听,并向工作线程发送请求。Windows服务必须快速响应(milisencods),吞吐量是必需的。(每秒请求数)
工作线程将相互通信。我想在厄朗解决这个问题
所以我认为erlang+节俭会起到很好的作用。我说得对吗?有什么建议吗 您的解决方案是合理的。为了让您了解最新情况,我建议您阅读gen_服务器、主管和应用程序。
Thrift将生成存根文件,通过编译将生成一个传输/接受程序。由您提供t
我经常看到Erlang函数返回ok,或{ok,},或{error,}
假设我的函数返回一个整数N。我的函数应该只返回N,还是{ok,N}
或者假设我的函数包括调用io:function(“Yada-Yada”)。它应该返回ok还是什么都不返回
或者假设我在做一张唱片或者开玩笑。我应该返回{ok,R}还是(ok,F}
谢谢
LRP
假设我的函数返回一个整数N。我的函数应该只返回N,还是{ok,N}
如果根本不可能出现错误,或者任何错误都表明存在编程错误,N。如果可能有失败的原因,则返回{ok,N}
需要实现来自从其他进程接收许多传入消息的进程的同步调用。区分问题-返回呼叫的消息到达时。我是否需要生成额外的进程来将msg从队列提取到缓冲区中,同时返回未遇到的msg,然后将其发送到主进程,并在每隔一次接收后发送。诀窍是使用引用作为复制的令牌:
replicate() ->
{ok, Token} = db:ask_replicate(...),
receive
{replication_completed, Token} ->
因此,我试图使用touples(一种学习练习)为erlang编写tic-tac-toe。我总是希望板变量是九个元素的元组。我已经赢了比赛,但是要和猫比赛是很困难的。我想玩猫的游戏,但当我只希望它匹配x或y,而不希望它匹配其他元素时,它将匹配其他元素,如[],或“。例如:
{(x||y),(x||y),(x||y),(x||y),(x||y),(x||y),(x||y),(x||y),(x||y)} -> "Cat's game!"
这基本上就是我想要做的,但我不知道如何使用Erlang元
如何将[,]转换为[“a”、“b”、“c”]?[binary_to_list(X)| | X您可以这样做:
A=[<<"a">>, <<"b">>, <<"c">>]
B=[binary_to_list(Item) || Item <- A]
A=[,]
B=[binary_to_list(Item)| Item或使用list:map/2:
lists:map(fun erlang:binary_to_list/1,
我想学习一门函数式语言,Mnesia似乎是“杀手级应用”,足以让我学习Erlang。我想先澄清一些概念
记忆是如何在关系上强化参照完整性的?旧文章说,它不是在数据级别强制执行的。现在换了吗?或者Erlang和Mnesia是否提供了允许我们编写可证明正确且可维护的代码以维护引用完整性的特性?甚至对于n个表之间的传递关系
查询语言是否支持不包含全文的即席查询
大容量分布式系统怎么样?有4GB的文件限制,对吗?如何将1000万(或更多)行写入数据库?它是否会自动将自己分配到其他节点,从而成为高可用性?
当使用cpu_sup模块时,它返回以下消息。我的操作系统是mac snow leapord。这是真的还是我安装的erlang问题
OS_MON (cpu_sup), util/1 unavailable for this OS
10> cpu_sup:util([per_cpu]).
=ERROR REPORT==== 12-Mar-2012::14:48:47 ===
OS_MON (cpu_sup), util/1 unavailable for this OS
{all,0,0,[
我需要使用
ets和dets。
我搜索了整个网页,也在这里,但我没有找到任何简单的例子
关于如何处理大型XML文件。
首先,我只想了解如何在不将整个文件上传到内存的情况下读取该文件
Thnx.我不知道Erlang,但似乎可以集成C库。如果你愿意走这条路,我可以建议你去图书馆看看。这是我所知道的快速、轻量级的xml解析器库。一个简单的回调机制调用每个xml元素的代码,您可以自己决定是将其保留在内存中,还是跳过它
我知道,这是非常低级的。但遗憾的是,对于非常大的数据,这通常是唯一的方法
下面是我在谷
是否有方法指示Erlang VM将一组进程标志应用于系统中生成的每个新进程
例如,在测试环境中,我希望每个进程都设置save_调用标志 一种方法是将Erlang跟踪功能与.Erlang文件相结合
具体地说,您可以使用提供的低级跟踪功能,也可以简单地利用该函数创建一个新的跟踪进程,该进程在每次收到跟踪消息时执行自定义处理程序函数
为了使事情自动化一点,您可以在运行代码的目录或主目录中创建一个Erlang启动文件。Erlang启动文件是一个名为.Erlang的特殊文件,每次启动运行时系统时都会执行该
我正在从事一个项目,该项目使用google proto缓冲区进行内部数据交换。它的工作原理与广告中的一样好,但是对于包含重复字段的消息,它的工作原理与预期不同。以下是一个例子:
示例test.proto文件:
message Test {
optional string t = 1;
}
message Tests {
repeated Test testsList = 1;
}
生成erlang代码:
1> protobuffs_compile:scan_file("
我试图为欧拉计划的问题14写一个解决方案。我跑得最快的——不是下面的那个——跑了58秒左右。我发现使用谷歌搜索的最快速度大致如下:
%% ets:delete(collatz) (from shell) deletes the table.
-module(euler) .
-export([problem_14/1]) .
collatz(X) ->
case ets:lookup(collatz, X) of
[{X, Val}] -> Val ;
[]
以下代码也来自rabbitmq的supervisor2.erl。该代码的功能是通过以下方式杀死主管的孩子:
监控子系统发送可捕获的退出信号
启动计时器
如果计时器到达,则发送不可探测的退出信号(终止)
我关于退出和下降信号的问题。
如果孩子没有捕捉到退出信号,主管将收到2个信号,首先是退出信号,然后是下降信号,对吗?信号序列是否得到严格保证
如果孩子捕捉到退出信号,监管者只会收到1个信号,只是下降信号,对吗
terminate_simple_children(Child, Dynamics, S
我有一个价值清单 “Z0010”、“Z0011”、“Z0012”、“Z0013”、“Z0014”、“Z0015”、“Z0016”、“Z0017”、“Z0018”、“Z0019”
我想开发一个在参数中取值的函数
我想在我的函数中做一个测试,如果作为参数传递的值等于列表中的值,在这种情况下,它将显示“existe”,如果不是,它将显示“notexiste”
我尝试:
test(Token)->
case get_user_formid_by_token(Token) of
我尝试通过udp进行多播,但在osx下使用erlang R15B03时遇到了问题。如果我在Ubuntu12.10上运行相同的代码,一切正常
打开插座时,我使用以下选项:
-define(MULTICAST_GROUP, {239,255,255,250}).
-define(MULTICAST_PORT, 1900).
-define(OPTIONS, [list, {active,true}, {ip, ?MULTICAST_GROUP},{multicast_ttl, 255}, {
我想在“where”表达式中检查参数是否为dict类型,但在erlang参考书中找不到它
init(Module_symbol_dict) where ???(Module_symbol_dict) ->
#state{module_symbol_dict=Module_symbol_dict}.
如果手动编写,则不能在where表达式中使用。该怎么办?无法检查变量的类型是dictionary还是其他非标准类型。然而,也有一些技巧。我们可以找出字典到底是什么。启动Erlang s
如果客户端配置为创建用于接收消息的临时队列,是否可以配置只允许创建一个队列?
若有缺陷的客户端在服务器上创建了太多的队列,这对服务器来说会是一个大问题吗
如何配置以防止客户端浪费资源
-module(amqp_example).
-include("amqp_client.hrl").
-compile([export_all]).
test() ->
%% Start a network connection
{ok, Connection} = amqp_conn
标签: Erlang
high-availabilityotperlang-supervisormochiweb
我正在构建一个Erlang/OTP系统,它由一个MochiWeb web服务器、一些自定义Erlang/OTP应用程序和一些非本机组件组成,如下所示:
存储MochiWeb服务器状态和持久数据(用户、帐户等)的CouchDB数据库
用于存储其他实体(订单、账户等;客户要求:无法迁移到CouchDB,数据应按原样使用)的旧式PostgreSQL数据库
星号服务器,用于向系统用户提供电话通知
我希望实现高水平的正常运行时间和可用性,因此我想知道监控系统中非Erlang/OTP元素的最佳方法是什么
上面的代码在erlang中工作,所以理想情况下,下面的代码应该在elixir中工作
io_lib:fread("~d/~d/~d", "2013/03/03").
但它会生成错误“无函数子句匹配”
检查后发现长生不老药像打电话给模块一样
:io_lib.fread("~d/~d/~d", "2013/03/03")
erlang“char list”中的双引号转换为Elixir“char list”中的单引号erlang“char list”中的双引号转换为Elixir“char list
我正在尝试设置分布式tsung群集,但无法使其运行
tsung -f tsung-script.xml start
Starting Tsung
"Log directory is: /home/ec2-user/.tsung/log/20140414-0158"
Host key verification failed.
我已经尝试过手册中关于打开所有端口的建议,我能够在控制器和从机上运行tsung。如果尝试手册调试部分中的test命令,则会出现相同的错误
erl -rsh ssh -sna
我正在寻找一个可以发现新的erlang库的服务。我知道我可以在Github或BitBucket中找到一些,但我一直在寻找更具体的东西
我记得我在过去发现过类似的东西,但我再也找不到了。是Erlang VM的包管理器。大多数包都是用Elixir编写的,但也有一些Erlang包。Hex目前只支持Elixir的自动包管理,但您仍然可以找到Erlang包并找到指向Github存储库等的链接
您也可以在Erlang代码中直接调用Elixir函数,请参阅文章。您可能会记住的是,为了支持Elixir函数而停止
我在我的rebar.config中设置了一些依赖项(我以前在其他项目中也这样做过)
rebar.config:
{sub_dirs, ["sbin", "priv"]}.
{lib_dirs, ["deps/erlang"]}.
{erl_opts, [{parse_transform, lager_transform}]}.
{eunit_opts, [verbose, {report,{eunit_surefire,[{dir,"."}]}}]}.
{cover_enabled, true}
我仍然处于Erlang的学习阶段,所以我可能错了,但这就是我理解进程消息队列的方式
一个进程可以在它的主接收循环中,接收特定类型的消息,而稍后它可以被放入一个等待循环中,以处理第二个循环中不同类型的消息。如果进程将在第二个循环中接收到第一个循环的消息,它只会将它们放入队列中,暂时忽略它们,并且只处理它在当前循环中可以匹配的消息。现在,如果它将再次进入第一个接收循环,它将从头开始,并再次处理它可以匹配的消息
现在我的问题是,如果这就是Erlang的工作原理,并且我正确理解了这一点,那么当一个恶意进
我有一个堆栈,我想把一个列表推到堆栈中。例如
comp:stack({push,[{{plus,{num,2},{num,2}}]},[])
然后它应该存储在堆栈中,类似这样
{{num,2},{num,2},plus}-例如,push plus将位于底部,然后num2将位于顶部,另一个num2将位于上一个num2的顶部
现在我想打开整个列表,得到这样的东西
{{num,2},{num,2},plus}
这是我到目前为止的代码,它所做的只是一次推一个和弹出一个
stack([],StackLis
如何在函数内部创建映射,然后将其作为参数传递给erlang中的另一个函数
我用以下代码进行了尝试:
-module(maps_all).
-export([test_my_map/2]).
test_my_map(K, V) ->
io:fwrite('~w ~w ~n done.',[K, V]),
nested_func(#{K => V}).
nested_func(MyMap) ->
io:fwrite('In nested function
我在尝试启动C节点服务器时遇到了一个奇怪的问题。我是在效仿美国的例子
我发现我会失败的
if (erl_publish(port) == -1)
erl_err_quit("erl_publish");
在调试模式下运行epmd时,出现故障后显示以下消息:
got partial packet only on file descriptor 4 (0)
gdb显示应用程序在检查有效响应时在epmd_publish.c中出错
if (((res=get8(s)) != EI_EPMD_ALI
官方手册介绍了如何使用consoleriak admin创建bucket类型
但是我想直接从远程集群上的客户端(它是一个erlang应用程序)创建bucket类型。
这有可能吗
还有,我为什么需要这个?非常适合测试和迁移。您尝试过使用吗
像
riakc_pb_socket:set_bucket_type(Pid,[{n_val,10}])。
riakc_pb_socket:set_bucket_type(Pid, <<"my_type">>, [{n_val, 10}]
标签: Erlang
yawslarge-file-upload
我正在Yaws 2.0上测试脚本,但不起作用。该脚本是为Yaws 1.57开发的
Yaws的日志是:
POST /html/upload2.yaws HTTP/1.1
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Host: 192.168.26.10
Referer: http://192.168.26.10/html/uploa
我正试图找到一种方法来打开一个临时端口(基本端口,而不必提供特定的端口号,并且从临时端口范围)。这适用于通过UDP协议的客户端请求。我知道如何通过以下方式打开UDP通信的特定端口:
{ok,Socket} = gen_udp:open(8000).
但是,您不希望提前知道可用的端口号,只要让系统提供一个(如果可能的话)。
有没有关于如何在Erlang中最好地执行此操作的建议或想法?使用与在C中相同的方法执行此操作:指定端口0
1> {ok, S1} = gen_udp:open(0).
在eunit测试中,是否可以设置测试代码中使用的环境变量?此操作失败,**错误:undef:
example_test() ->
application:set_env(an_app, example_key, "value").
编辑:
对于错误没有太多说明,但下面是完整的堆栈:
env_request_handler_tests: a_test_ (example_test)...*failed*
in function application:set_env/3
c
Erlang非常擅长通过没有共享状态来清理问题。但当您确实想要共享状态时会发生什么?例如:配置选项、统计信息收集、事件/回调服务器。使用一些记录作为状态或使用流程字典生成新流程是实现共享状态的一种方法。您将反复循环该过程,并回复任何消息。多个进程将只使用本质上不纯净的getter和setter函数来查询该进程,这些函数围绕着消息传递,但在这里,我们只是将Erlang变成了一个比java对象慢的不纯净对象,因为还原系统轮流执行比在每个全局状态周围使用内存互斥锁慢。如果我们不小心,它甚至有可能出现邮
我试图使用外部参照从一组模块的调用图中检索两个函数之间的路径
考虑以下相互调用的函数:
x:a/1 -> y:b/1 -> y:c/1
x:d/1 -> y:e/1
使用查询:closure | a:Mod | b:Mod将为我提供从模块a到模块b的任何直接或间接调用的路径的起点和终点的元组。因此,对于上述示例:
[{{x,a,1}, {y,b,1}},
{{x,a,1}, {y,c,1}},
{{x,d,1}, {y,e,1}}]
这是我正在寻找的通过调用图的路径集,
我想从Elixir/Erlang进行系统调用。
我知道Erlang有,Elixir有,但从这些链接我不知道我应该如何使用sudo。
我尝试运行此操作,但收到一个错误:
> System.cmd("sudo su", [])
** (ErlangError) erlang error: :enoent
(elixir) lib/system.ex:450: System.cmd("sudo su", [], [])
关于如何实现这一点,您有什么想法吗?eNont是POSIX所说的“没有这样
如何处理cowboy中存在的资源回调?毕竟,要找出资源是否存在,我必须查询(例如数据库)资源。但是在AcceptResource回调期间(例如到_html),我必须再次查询资源。有没有办法防止这种双重查询
有没有办法为AcceptResource回调保留该资源,这样我就不必再从数据库中提取它了
阅读cowboy文档,可以了解如何处理rest请求。
在其中,首先调用回调resource\u exists。在resource\u exists中,您可以将数据库查询的结果添加到resource\u e
上个星期,这一切都很顺利。我会打开
cd myprojectdir
呃
(二郎壳)。
c(房间)。
{ok,R}=room:go()。
然后我可以使用gen_服务器向R发送消息,与我的房间模块进行交互
我从一家牛仔路由分支机构开始。我看到事情进展顺利,当我今天看到它时,我发现了编译错误。所以我回到我的主分支。shell中仍然有错误,甚至回滚了一些提交,嗯
当我尝试调用room:go()时,其他模块打印为undef。如果我依次编译它们,那么room:go()将起作用
房间启动桌子,桌子启动时钟
我目前正在调查一个大型Erlang应用程序中的性能问题。应用程序的CPU负载比预期的要大。为了首先了解系统的哪些部分负责加载,我想执行调用堆栈采样,如中所述
有没有比反复调用erlang:process\u info(Pid,backtrace)并从该输出中对函数进行灰色化更好的方法
请注意,系统太大,无法使用fprof,而且etop也没有将我指向正确的方向。现在也不可能只对系统的一部分使用fprof,因为我首先需要确定性能问题的一般位置。获取堆栈实际大小的简单方法是进程信息(Pid,堆栈大小)
我从erlang开始,从一些简单的练习开始。在这个例子中,我试图计算高斯三角形行。我不明白为什么我会收到这样的警告:
Warning: this clause cannot match because a previous clause at line 6 always matches
这个问题与保护条款有关,但对我来说似乎是合法的xD。以下是完整的代码:
create_row(Initial)->create_row(Initial,[1]).
create_row([First|R
我试图使用评测CouchDB代码来调查我的应用程序中的一些性能问题。我尝试在rebar.config.script()
但是,当我运行configure从其源代码构建CouchDB(2.0.0)时,会出现一个错误:
Dependency not available: eflame-.* ({git,
"git://github.com/proger/eflame.git",
假设我有一个Elixir项目,我想用来为自己构建Elixir支持的命令行工具。我可以创建这样的工具
似乎每个混合项目只能创建一个escript可执行文件。即使我在mix.exs中这样做:
def project do
[
elixir: "~> 1.4",
deps: deps(),
# (...)
escript: escript(:foo),
escript: escript(:bar),
]
end
我不熟悉Elixir,不确定它的字符串匹配功能。
我正在尝试编写一个elixir函数,它接受字符串S作为输入,基本上只是一条tweet,并输出其中包含hashtag(#)的所有单词
那会很有帮助的。谢谢。查看模块
完成此任务的快速且灵丹妙药的方法是在过滤器中进行模式匹配:
"This is a #bad day for #trump #america"
|> String.split()
|> Enum.filter(fn
<<"#", _ :: binary
我试图用erlang编写一个模式匹配函数,如:
to_end("A") -> "Z".
整个想法是使用模式匹配函数将字符串(如“ABC”)转换为不同的字符串(如“ZYX”)。它看起来像一个字符串被表示为引擎盖下的列表
我所依赖的事实是,erlang中“字符串”上的模式匹配将导致单个字符串字符。但我发现:
21> F="ABC".
22> F.
"ABC"
23> [H | T]=F.
"ABC"
24> H.
65
25> T.
"BC"
为什么这种类型的
正如问题所述,当我设置服务器时,它可以在同一网络(不同的计算机但相同的wifi)上接收来自客户端的消息,但当客户端在另一个网络上时,它无法到达服务器,我不知道为什么它不能。有人能帮忙吗
-module(client).
-export([client/2, clientDNS/4]).
client(PortNo,Message) ->
IP = {1, 1, 1, 1}, % Edited for privicy
{ok,Sock} = gen_tcp:connect(IP,PortN
当PUT的正文大于某个长度(在我的例子中是902字节)时,这似乎会导致奇怪的行为,即ejabberd修剪正文(在我的例子中,它接收格式错误的JSON)
Github参考:
如果我将案例陈述更改为:
case Method of
_AnyMethod ->
case recv_data(State) of
{ok, Data} ->
LQuery = case catch p
最近,人们对Erlang作为一种在多核上编写并行程序的语言产生了很大的兴趣。我听说有人认为Erlang的消息传递模型比主流的共享内存模型(如线程)更容易编程
相反,在高性能计算社区中,占主导地位的并行编程模型是MPI,它也实现了消息传递模型。但在HPC世界中,这种消息传递模型通常被认为很难编程,人们认为像OpenMP或UPC这样的共享内存模型更容易编程
有人知道为什么在IT和HPC世界中,信息传递与共享内存的感知存在如此大的差异吗?是因为Erlang和MPI实现消息传递的方式存在一些根本性差异,
正如手册中所说
如果不需要返回值唯一且单调递增,请使用os:timestamp/0来避免一些开销
os:timestamp/0应该比erlang:now/0快
但我在我的PC上测试了定时器:tc/3,对于10000000次呼叫,以微秒为单位的时间是:
二郎:现在是951000
操作系统:时间戳1365000
为什么erlang:now/0比os:timestamp/0快
我的操作系统:Windows 7 x64,erlang版本:R16B01
------------------编辑------
1 2 3 4 5 6 ...
下一页 最后一页 共 81 页