标签: Erlang
development-environmentscalabilityproduction-environment
我目前正在学习Erlang
因此,用户能否给出他们的任何Erlang应用程序部署的有趣示例
我想了解一下Erlang在过去电信中的常见用途,以及Erlang在开发/部署过程中带来的任何问题或意外好处
我希望这会给我提供更广阔的背景,并为我自己和任何其他跳入二郎的人敲响警笛
提前谢谢 我们的第一个应用程序是web/sms社交网络,我就这个主题写了一篇很长的论文,可以阅读。了解erlang/OTP已经提供的发布工具
Erlang引导脚本非常适合确保所有需要运行的应用程序都存在并且版本正确。在OTP框
标签: Erlang
otperlang-supervisorgen-server
有没有办法告诉gen_服务器:“主管已初始化所有gen_服务器,现在您可以发送消息了”
info(PlayerId) ->
Pid = case global:whereis_name(util:getRegName({?MODULE, PlayerId})) of
P when is_pid(P) ->
P;
_ ->
{ok, P} = player_sup:start_child(PlayerId),
P
e
我想使用即时重新编译与牛仔项目组装使用relx(根据牛仔)
问题是,即使我通过在我的_application.app.src文件中提及应用程序中的同步列表,成功地在应用程序中启动同步,如下所示:
{application, my_application, [
{description, "My Cowboy Application"},
{vsn, "0.1.0"},
{modules, []},
{registered, [my_app_sup]},
{
报告说:
请注意,运行时间是Erlang运行时系统中所有线程的运行时间之和,因此可能比挂钟时间大
但从这一点来看,cpu时间(运行时)似乎总是小于墙上的时钟时间:
两者之间的差异包括由于编程延迟或等待资源可用而经过的时间
运行时间怎么可能大于挂钟时间?假设一个操作的挂钟时间是1分钟,CPU时间是45秒。就其本身而言,这将证实您对CPU时间应该小于挂钟时间的怀疑
但是,现在考虑有两个线程来执行这个操作,每个线程都在一个单独的CPU上。墙上的时钟时间仍然是1分钟,但现在CPU时间(因为您有两个CPU
标签: Erlang
erlang-supervisorgen-server
作为解决计算密集型任务的一部分,我希望有1000台gen_服务器执行小任务并更新全局数据库。如何在erlang OTP中实现这一点?在大多数示例中,主管仅管理一台gen_服务器。一个主管可以管理同一个gen_服务器的上千个实例吗
e、 g.假设我想找到一个超长阵列的最大值,每个gen_服务器实例应在阵列的一部分上创建工作并更新全局最小值。是否可能:是。例如,您可以使用以下主管创建1000个进程的池:
-module (big_supervisor).
-export([start_link/0
我想知道是否有人知道像ejabberd在运行/sbin/ejabberdctl debug时那样进入Mochiweb的方法
确保基于mochiweb项目的erl调用start.sh的参数中存在-sname$NODE@$HOST(或-name$NODE@$FULLHOST)
使用以下代码创建文件debug.sh:
#!/bin/bash
erl -sname debug_$NODE@$HOST -remsh $NODE@$HOST
确保不要在脚本中混合使用sname和name,因为。另外,确保
我们有很多云服务器,我正在构建一个新的云服务器,以测试云服务器上的资源供应
在我认为应该崩溃之前,我就遇到了致命的崩溃,因为某种系统资源正在耗尽
=INFO REPORT==== 14-Feb-2010::12:40:14 ===
Setting up: "http://sub48.localhost:9000" as pirate
Mnesia('ares@example.com'): Data may be missing,
Corrupt logfile deleted: "(...)/
我是一名网络开发者,是一名主修电信的大学生。这意味着我擅长编程,并且对电信网络略知一二(在高的、非技术的层面上)
我一直在读到Erlang在整个电信行业都被使用(据说是因为它的性能)
我想知道我是否有办法将我的编程技能与我在Erlang主修的电信专业结合起来。大多数Erlang/telecom产品都是开源的吗?有没有开源的电信项目是用Erlang编写的
更新:sipwiz的评论让我想到了一个比“Erlang的使用”更大的问题。我如何通过编程充分了解电信网络和电信监管环境。我希望这没有偏离主题。高
我在erlang condose的first@localhost节点
=ERROR REPORT==== 1-Jan-2011::23:19:28 ===
** Node 'second@localhost' not responding **
** Removing (timedout) connection **
我的问题是-在这种情况下,什么是超时?在引发此事件之前有多长时间?
如何防止这种“恐怖”?我只能通过重新启动节点来恢复正常工作。。。
但正确的方法是什么
谢谢你,新年快乐 g对于
我在节点A上有几个Erlang应用程序,它们正在对节点B进行rpc调用,我在节点B上有Mnesia存储过程(数据库查询函数)和Mnesia DB。现在,对节点B进行rpc调用以获取数据的并发进程的数量偶尔会增加到150个。现在,我有几个问题:
问题1:对于对远程节点的每个rpc调用,节点a是否会建立一个全新的连接(例如TCP/IP或UDP连接或在传输时使用的任何连接)?或者只有一个连接,而所有rpc调用都共享这个连接(因为节点A和节点B是连接的[与epmd进程有关]?
问题2:如果我在一个节点上
我有三台机器:A、B和C
我使用erl-name'node@xx.xx.xx.xx'在每台机器上启动外壳,其中xx.xx.xx.xx是它们的IP。问题是我可以从A ping到C和B ping到C(使用net_adm:ping/1),但我不能从A ping到B
=ERROR REPORT==== 18-Apr-2011::18:28:34 ===
global: 'x@ip.of.a' failed to connect to 'x@ip.of.b'
所有IP都是全局IP,A和B位于同一位置,共
我试图使用Riak的提交后钩子来构建一个分布式的、增量的基于MapReduce的索引,但是我想知道提交后钩子实际上运行在哪个Riak节点上。它们是在客户端用于放置提交的节点上运行,还是在数据持久化的主节点上运行?如果是后者,我想我可以从那里高效地进行映射,或者从输出中减少并放置额外的记录 从
处理“Riak PUT请求的协调”,因此post commit钩子在协调器节点上运行,即客户端将PUT发送到的节点。快速问题:有没有办法让post commit钩子异步执行?
Post-commit hoo
我可以嵌套接收{tcp,Socket,Bin}->调用吗?例如,我有一个名为loop的顶级循环,它在接收到tcp数据时调用parse_header函数来解析头数据(一个整数,它指示要遵循的数据类型及其大小),之后,我需要在继续之前接收整个负载。当我需要完整的20个字节时,我可能只接收4个字节,并且希望在一个名为parse_payload的单独函数中调用receive。因此,调用链看起来像循环->解析\u头->解析\u有效载荷,我希望解析\u有效载荷调用接收{tcp,Socket,Bin}->我不
标签: Erlang
otperlang-supervisor
我正在尝试建立一个主管树,其中我有以下结构:
1个根主管->3个“级别”主管->每个级别主管都有一个初始值设定者主管->X个工作人员(为了示例,目前只有1个)
但是由于某种原因,启动第二级管理器会使整个树终止,如果我只启动1个root->1个level->1个init->1个worker(或更多个worker),这很好,但是只要我尝试添加更多的管理器,树就会终止
-module(otp_supervisor).
-behavior(supervisor).
-export([start_cel
我想将一些来自套接字的二进制文件转换为原子,稍后我将在gen_服务器调用中使用这些原子。因为我不想用新原子(可能是无效原子)充斥VM,所以我使用:
二进制到现有原子(二进制,编码)
现在,我应该如何(或者更好地在哪里)在系统启动时声明有效的原子,以便转换有效 在任何加载模块中使用原子就足够了,例如在情况下匹配表达式或其他比较
如果比较发生在不同的模块中,从您调用binary\u到\u existing\u atom,那么您需要确保在进行转换时加载该模块。如果您构建了一个版本并在“嵌入式”模式下运
我正在尝试使用ssh密钥连接到服务器,但不断有人问我密码。我尝试过使用和不使用user_dir选项。有人有什么想法吗
:ssh.start
{:ok, S} = :ssh.connect('some.host.com', 22,
[
{:silently_accept_hosts, true},
{:user_dir, '/Users/nan/.ss
有人能给我解释一下这行erlang代码的作用吗
[ReportBody|_] = [Body || {<<"val1">>,<<"val2">>,_,_,Body} <- Parts].
[ReportBody | | |]=[Body |{,,|,|,Body}它是一个
要求零件是一个列表
对于此列表的每个元素,检查它是否是五元素元组,其中第一个元素是二进制,第二个元素是
如果是,则第五个元素称为Body,并添加到结果列表中
如果否,则跳
出于某种原因,我的erlang服务器在每次请求后都会生成一个case_子句错误。这是我的代码:
keychain\u no\u auth\u handler.erl
-module(keychain_no_auth_handler).
-export(
[ init/3,
content_types_accepted/2,
terminate/3,
allowed_methods/2,
handle_request/2
]).
-export([is_
我使用以下代码检索URL:
geturl(Url)->
{ok, RequestId}=httpc:request(get,{Url,[{"User-Agent", "Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.8.131 Version/11.10"}]}, [],[{sync, false}]),
M = receive
{http, {RequestId, {_HttpOk, _ResponseHeaders, _Bod
但是
之后
如何找出它为什么不启动?其他节点现在处于“挂起”状态
PS可能“节点名称已占用couchbase Babymatter_of_ns_1”是第二次尝试启动,主要错误是“不允许杀死请求,活动节点”
PPS通常情况下,集群中其他节点上的节点显示为关闭,其他节点处于“pend”状态,断开节点上的端口8091没有响应,尽管在启动某项操作之后。听起来您有一个部分Couchbase实例仍在运行。我建议终止Couchbase拥有的所有进程,然后尝试重新启动。根目录:
# /etc/init.d/co
我是Elixir/Erlang编程新手
如何实现Elixir模块的模块属性,以便模块的用户可以在模块构造函数中进行设置
比如说,
defmodule Config do
some_property: nil
other_property: nil
def constructor(one, two) do
some_property = one
other_property = two
end
def get_proper
我正在尝试设置一个HA rabbit mq集群,并按照中的说明进行操作
第一个rabbitmq服务器很好,而在第二个和第三个rabbitmq服务器中,我得到以下错误
Kernel pid terminated (application_controller) ({application_start_failure,kernel,{{shutdown,{failed_to_start_child,net_sup,{shutdown,{failed_to_start_child,auth,{"Coo
二郎初学者在这里
我有一个元素列表,其中我想将一些元素映射到带有记录的项
List = ["a", "b", "c", "d", "e"].
我还有一个记录,定义如下:
-record(a_record, { itemA = "", itemB = ""}).
我想将列表映射到一个与记录定义匹配的元组中,以便最终得到:
#a_record{itemA="A", itemB="B" }.
我正在查看列表模块,但还没有找到一个干净的解决方案
谢谢你的帮助 您可以使用记录信息/2和列表到元组/1
当我有一个Erlang进程ID时,使用pid/3或list\u to\u pid/1函数(内部执行相同的操作),我可以获得用于调试目的的进程
Process = pid(0,4,1).
Process = list_to_pid("<0.4.1>").
Process=pid(0,4,1)。
进程=列表到pid(“”)。
所以问题是,;那怎么办
有许多函数接口同时接受process()和port()数据类型,如。因此,我需要知道是否有一种方法可以通过它们的ID(例如,#Port)
向一组进程发送/广播消息的实用方法是什么
说明:
用户将聚集在聊天室ID,一个ETS存储器将用于存储用户的进程ID和聊天室ID{Pid,Rid}
问题:
如何同步向与房间ID配对的所有进程发送消息?不可能同步
您可以使用Rid在聊天室中获取用户列表
ListPid=ets:select(表,[{{'$1','$2'},[{'='','$2',Rid}],'$1']}])
您可以使用列表理解或lists:foreach/2
list:foreach(fun(X)->X!消息结束,ListPid)
当存在大量节点或二进制数据时,本机Erlang消息是否能提供合理的性能
案例1:有一个大约50-200台机器的动态池(erlang节点)。它不断变化,大约每10分钟添加或删除5-50台机器
案例2:假设我们正在使用这个集群构建youtube克隆,并计划通过消息流传输视频数据
所谓合理的性能,我的意思是-比复杂的Erlang代码可能达到的最高性能慢2-3倍是可以的,慢10倍是不可以的发送消息和二进制数据之间没有任何显著差异。消息只是使用术语\u to \u binary转换为二进制数据包,并通过T
目前使用Mac OS X上nix通道提供的Elixir版本。该软件包是使用Erlang 18构建的:
$ iex --version
Erlang/OTP 18 [erts-7.3.1.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]
IEx 1.4.2
我想更新包以使用Erlang19。用更新的依赖性重建NIX中包的最直接的方法是什么? < p>,您可以考虑使用工具版本管理器。例如,通过
我试图在FreeBSD 10.1操作系统上编译Erlang OTP-R16B03-1。当我运行/configure命令时,输出为
odbc : ODBC library - header check failed
我已尝试安装unixODBC、iODBC。还存在/usr/ports/databases/unixODBC。sql.h文件位于/usr/local/include中
我仍然收到链接失败错误。任何帮助都是有用的
/configure | grep odbc命令的日志
运行此模块时:
-module(cbbs).
-export([ahu/0, duct/1, simulate/0, room1/1, vent1/0]).
duct(P) ->
if
P>=250 ->
apid ! full,
io:format("Full Pressure~n", []),
receive
gia ->
vent1 ! {gi
当单独运行透析器时,它使用HiPE编译其模块,以加快分析速度:
dialyzer --src -r .
Checking whether the PLT /home/foo/.dialyzer_plt is up-to-date... yes
Compiling some key modules to native code... done in 0m12.27s
Proceeding with analysis...
当有许多模块需要分析时,这会对运行时间产生很大影响
当您运行R
下面的代码片段有什么问题
> A = [{X, 1} || X <- lists:seq(1,5)].
> lists:keyfind({3,1}, 1, A).
false
>A=[{X,1}| | X列表:keyfind({3,1},1,A)。
假的
为什么函数返回false?理想情况下,它应该返回{3,1}。列表:keyfind/3通过比较每个元组的Nth值与给定值来搜索元组列表。您的代码正在搜索第一个元素为{3,1}的元组,它在列表中不存在。要搜索第一个元素为3的元
我写了一个新的图书馆叫
这是一个主管图书馆。
它的一个特性是给控制器一个arity 2的乐趣,控制器将为进程的每次崩溃调用函数,第一个参数是崩溃原因,第二个参数是崩溃计数,例如:
-module(director_test).
-behaviour(director).
-export([start_link/0, init/1]).
start_link() ->
director:start_link(?MODULE, []).
init([]) ->
Chi
标签: Erlang
multipartform-datacowboy
我想通过multipart/form数据内容类型上传文件。
我可以看到整个内容大小(内容长度),但想知道上传3个文件时每个部分的大小(例如)
这是我获取文件的方式:
multipart(Req0) ->
case cowboy_req:read_part(Req0) of
{ok, Headers, Req1} ->
?LOG_WARNING("Headers: p~n", [Headers]),
{ok, _Body, Req} = cowboy
尝试使用函数string:find/2,但每次都出现错误
CRASH REPORT Process <0.779.0> with 0 neighbours exited with reason: {{undef,[{string,find,[[<<208,162,51,32,208,190,208,177,209,137,46,44,32,84,51,32,116,111,116,97,108,44>>],[<<208,186,209,128,20
我希望能够在运行时动态更改计算管道,但GenStage似乎要求在编译时通过subscribe\u:[…]机制定义计算图。有没有办法创建动态计算图?例如,在下面的示例中,我想在运行时在管道图中的“减去7”和“减去4”顶点之间切换
这是否可能使用GenStage?我可能会有非常复杂的管道,所以我需要一个解决方案,以复杂的方式扩展到不断变化的图形,而不是特别的解决方案,例如在本例中,参数化要减去的整数。我希望能够添加或删除整个子树,在子树之间切换,并将节点添加到图形中,包括将它们拼接到任何子树(包括
标签: Erlang
ejabberderlejabberd-moduleejabberd-hooks
我正在使用ejabberd18.09进行IM应用。该应用程序几乎没有为ejabberd(xmpp)消息添加扩展所需的功能
我在offline_message_钩子上创建了一个自定义模块来捕获脱机消息并将它们发送到我自己的url进行进一步处理
发送到ejabberd的消息具有不同的情况,具体取决于消息的类型,如下所示
如果我正在发送照片,消息如下所示
<message xmlns="jabber:client" xml:lang="en" to="someuserjid2" from="{s
我正在用脏笔向mnesia写记录
:mnesia.dirty_write({Table_Name, id, Node.self(), timestamp, msg})
我想删除超过1小时的记录,如何设置到期时间或TTL?Mnesia没有内置的记录到期时间/TTL支持。您必须自己实现此功能,例如定期扫描表中过期的记录并将其删除。由于mnesia没有任何ttl机制(至少我找不到),因此我编写了一个gen服务器,该服务器将删除mnesia中超过1小时的所有记录。此gen服务器每1小时激活一次,删除旧
:
这可能是因为hostname-f没有返回
值,即您的计算机不知道在
网络。您可以使用--sname,给出全名,如--namefoo@IP_ADDRESS或在机器之间有意义的东西(因此
可以找到对方)
另一种解决方案是(sudo hostname),或更新主机文件(例如,Linux中的/etc/hosts);DR使用erl-sname-lofa而不是erl-name-lofa
说明:
--name需要一个完全限定的名称,即@
--sname接受一个短名称,即用户名,从主机名-f
所以,
i
有没有办法将io:format()打印的数据从erlang shell重定向到文件中?我知道我可以打开一个文件(IoDevice)并直接将数据写入其中,但它需要更改代码,我现在不想这样做。只需使用erl-noinput-s模块函数-s init stop>文件运行它即可
这里有一个例子
Erlang代码:
-module(test).
-compile(export_all).
function() ->
io:fwrite("Hello world!~n").
在壳牌:
标签: Erlang
senddisconnectgen-tcp
如果客户端通过正常的tcp连接连接到服务器,然后客户端的连接断开,则服务器将获得(假设活动模式){tcp_closed,Socket}。但在某些情况下,服务器不知道客户端已断开连接,例如电源故障或崩溃等(我相信,我可能是错的)。在这些情况下,客户机不在了,但服务器仍然认为它已连接。在这种情况下,如果服务器试图向客户机发送消息,它会假定客户机收到消息,还是tcp堆栈会在低级别上进行排序,然后服务器返回某种错误
我知道这是一个过于简单的问题,但我自己测试它时遇到了困难,因为我无法让客户像我需要的那样
有没有一种简单的方法可以获取连接的erlang节点的IP地址?我想与几个节点建立一个SCTP连接,由于系统的设计方式,我对它们的了解只是它们的node()原子
更准确地说,我想知道Erlang(或某些派生技术)是否提供了一些API,允许在给定标识符atom()的情况下获取节点的IP地址。我通过在节点上启动一个进程并让该进程发送包含其IP地址的消息来解决这个问题。如果有人知道一个更优雅的解决方案,我想听听
在节点上的进程启动后,我用来获取地址的命令是:inet:getif()。请记住,该命令的结果
标签: Erlang
distributeddistributed-computing
我正在用Erlang开发一个简单的框架来处理基于2人回合的游戏。代码如下:
-module(game).
-export([start_server/0,generate_server/0,add_player/0,remove_player/0]).
generate_server() ->
Table_num = 0,
Player_num = 0,
io:format("Server generated...~n", []),
io:format("The current num
标签: Erlang
clientip-addresstcp-ip
是否有办法在Erlang中获取tcp连接的客户端ip地址;基于客户端连接到服务器的假设
我还想知道是否有必要向特定的客户发送特定的数据包;与服务器不广播的情况一样,我是否需要ip地址向特定的客户端发送数据包,或者服务器是否只是为每个客户端使用引用(erlang:monitor)?用于另一端的地址。但是,如果您想在TCP会话中处理每个客户端,通常在每个客户端连接后,您将生成单独的erlang进程来处理该会话,然后再生成该进程
然后,在接收循环中,您将向客户机发送和接收二进制数据。考虑一下这个模块:
我有两个键值对列表([{key\u 1,value\u 1},…,{key\u n,value\u n}])。用第二个列表更新第一个列表的最佳方法是什么?例如:
1> extend([{1, "one"}, {2, "too"}], [{2, "two"}, {3, "three"}]).
[{1, "one"}, {2, "two"}, {3, "three"}]
我只找到了两个类似的函数:lists:keystore/4,它更新一个元组;和lists:keymerge,它合并两个列表
我正在尝试将列表ConnectedToms分配给新创建的服务器st记录中的列表ConnectedToms。但是我犯了一个错误
-module(server).
-export([loop/2, initial_state/1]).
-include_lib("./defs.hrl").
loop(St,{tryConnect,Atom}) ->
IsConnected = funcs:hasElem(St#server_st.connectedatoms,Atom),
我想用Riak的CRDTs实现像max计数器这样的东西来使用w/Yokozuna。
我的想法是有一个Riak映射,其中有两个计数器,一个要修改,另一个要在预提交钩子中更新到两者的最大值。
然而,我似乎找不到一种方法来更新Riak地图来做到这一点。
有什么帮助/更好的主意吗?要查询带横子纳的范围,您实际上可以使用一个集合并像查询计数器一样进行查询,这似乎很有效
我正在尝试运行在服务器上构建的特定OTP发布版本,但我不知道如何做到这一点
在releases目录中,我有以下版本:
发布/0.0.3
发布/0.0.4
发布/0.0.5
我在服务器上安装了ssh,但我不知道如何启动特定的版本才能启动?试试看。它非常适合在不同版本之间切换
在Erlang中转义控制字符的正确方法是什么
我有:
对于\t和\n字符,它的工作原理与我预期的一样:
io_lib:format("~p", ["str\ning"]).
["\"str\\ning\""]
但是对于\a:
io_lib:format("~p", ["str\aing"]).
["\"straing\""]
及
我需要得到“\”str\\aing\”字符串,在文件中它应该看起来像“str\aing”
谢谢您的帮助:)'a'不是控制字符,因此“\a”产生与“a”相同的字符
我有信用卡号码,比如说5940043536。为了安全起见,我只想显示前四位数字
在erlang中如何实现这一点?erlang中的字符串只是一个整数列表,因此可以使用列表:sublist/3:
1> String = "5940043543536".
"5940043543536"
2> lists:sublist(String, 1, 4).
"5940"
请注意,position参数从1开始,而不是0Erlang中的字符串只是一个整数列表,因此可以使用列表:子列表/3:
1>
这是我的代码:
defmodule Parent do
def arun(pid) do
:ets.new(:my_table,[:named_table, :set, :public, read_concurrency: true])
:ets.give_away(:my_table, pid, [])
end
def receiver do
pid = spawn(fn -> arun(self()) end)
receive do
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 131 页