erlang
coderplay
这个作者很懒,什么都没留下…
展开
-
tcp_server.erl注解
java 代码 %% Copyright (C) 2002, Joe Armstrong %% File : tcp_server.erl %% Author : Joe Armstrong (joe@sics.se) %% Purpose : Keeps track of a number of TCP sessions %...2007-06-21 15:58:10 · 82 阅读 · 0 评论 -
用telnet来与ejabberd交互
看了一篇文章,觉得用telnet来调试ejabberd也是一种好办法,同时可以明文看到服务器返回的xml. 先telnet上去 代码 # telnet 192.168.0.97 5222 Trying 192.168.0.97... Connected to erlt97.3322.org (192.168.0.97). Escape cha...2007-07-11 15:41:30 · 111 阅读 · 0 评论 -
ets,dets与大数据存储
ets与dets都是用来存大数据的机制 ets是Erlang term storage的缩写, dets则是disk ets. 它们不同的就是ets存在内存里面,而dets则存在磁盘上。ets存的数据表是暂时性的,拥有它的进程挂了,它也会挂掉. dets就算程序完成或者挂了,数据表还是持久存在的.如果是异常退出的, 可以进行修复.ets表看起来像是由erlang实现的,但实际上...2007-07-15 12:49:51 · 471 阅读 · 0 评论 -
Tracing和dbg
代码不必用特殊的标记(比如debug_info)来编译,也可以trace. erlang:trace是最底层的BIF实现的trace功能。格式如下erlang:trace(PidSpec,How,FlagList)它要通过erlang:trace_pattern(MFA,MatchSpec,FlagList)来辅助输出. MatchSpec这东西很难写,在dbg模块中可以用dbg:...2007-07-15 21:49:35 · 151 阅读 · 0 评论 -
epmd源码学习
注: 此处节点是指分布式中分布在各终端的点, 而结点是指存在数据结构中的元素. 各结点组成一个链表c 代码 typedef struct { Node *reg; /*已注册的结点链表*/ Node *unreg; /*注销的结点链表*/ Node *unreg_tail; /*...2007-07-26 10:14:22 · 122 阅读 · 0 评论 -
application
用pman 可以看出application controller 是一个gen_server实例, 由gen_server:loop/6执行相应的功能. 此进程注册名为application_controller2007-08-29 02:01:02 · 398 阅读 · 0 评论 -
gen_server
State用来存数据, 任何erlang term都行gen_server:start_link({local, ch3}, ch3, [], []) => {ok, Pid}第一个参数表示本地(local方式)建立一个名为ch3的进程.第二个参数表示回调函数(比如handle_call, handle_cast)所在的模块.注意,前者是进程名,后者是模块名. 两个可以不一样. 进程是从...2007-08-29 21:52:09 · 88 阅读 · 0 评论 -
supervisor一小技巧
simple_one_for_one可以让supervisor的所有child都以相相同的处理步骤来动态加载child.ejabberd的ejabberd_tmp_sup就是此技巧的一例.2007-09-04 13:20:15 · 151 阅读 · 0 评论 -
emulator调试日志: port篇
------------------ port 篇 -------------open_port/2这个是由bif实现, 源文件在erl_bif_port.c中, 函数是BIF_RETTYPE open_port_2(BIF_ALIST_2)其中:#define BIF_RETTYPE Eterm#define BIF_ALIST_2 Process* A__p, Eterm A_1, E...2007-10-06 16:14:49 · 303 阅读 · 0 评论 -
修正Programming Erlang中linked driver实例的小问题
也许很多人碰上过, 用example1_lid:start()会碰上如下错误: ** exited: {error,could_not_load_driver} ** 用gdb跟了一下, 发现其实load driver是没有问题, 问题出在load driver之后的版本匹配, driver_incorrect_version. 解决办法很简单,两步: 1...2007-10-08 14:50:51 · 119 阅读 · 0 评论 -
emulator调试日志: driver篇
--------- driver篇 ---------------driver一般通过erl_ddll.erl中的load_driver/2函数来实现. load_driver(Path, Driver) -> do_load_driver(Path, Driver, [{driver_options,[kill_ports]}])....do_load_driver(Pat...2007-10-08 16:35:21 · 324 阅读 · 0 评论 -
ejabberd管理页面和客户端
转战到97机器。在ejabber.config加上这么一行. 这样就有管理权限了, {user, "admin", "192.168.0.97"},表示admin@192.168.0.97这个用户。 {acl, admin, {user, "admin", "192.168.0.97"}}. 在浏览器的地址栏输入http://192.168.0.97:52...2007-07-11 00:23:57 · 831 阅读 · 0 评论 -
ejabberd在linux平台的安装与配置
这些天捣鼓了下ejabberd,准备研究它的代码,做为榜样~ 我这儿用的是1.1.3的代码,而svn上面的代码有些地方做了比较大的改动. 安装很简单 ./configure make && make install 就ok了. ejabberd 会安装在var/lib/ejabberd目录, 配置文件在/etc/ejabber...2007-07-05 21:17:12 · 216 阅读 · 0 评论 -
mnesia相关笔记
当前版本OTP 5.5的mensia建表的表名可以和记录名不一样. 代码 mnesia:create_table(t_employee, [{attributes, record_info(fields, employee)}]). 根据employee记录建立t_empolyee表...2007-06-29 12:17:51 · 84 阅读 · 0 评论 -
whereis函数
whereis(RegName) -> pid() | port() | undefinedReturns the pid or port identifier with the registered name RegName. Returns undefined if the name is not registered. 原来是erlan...2007-06-21 20:04:22 · 211 阅读 · 0 评论 -
OTP设计原则:概要
1 OverviewOTP 设计原则 是一套教你如何运用进程,模块和目录等条件来组织Erlang代码的原则. 1.1 Supervision Trees 管理树A basic concept in Erlang/OTP is the supervision tree. This is a process structuring model based on the idea of worke...2007-06-22 10:56:03 · 805 阅读 · 0 评论 -
OTP设计原则:Gen_Server行为
2 Gen_Server BehaviourThis chapter should be read in conjunction with gen_server(3), where all interface functions and callback functions are described in detail. 2.1 Client-Server PrinciplesThe c...2007-06-22 11:35:31 · 143 阅读 · 0 评论 -
OTP设计原则:Gen_Fsm 行为
3 Gen_Fsm 行为 This chapter should be read in conjunction with gen_fsm(3), where all interface functions and callback functions are described in detail.3.1 Finite State Machines3.1 有限状态机A finite st...2007-06-22 11:56:53 · 198 阅读 · 0 评论 -
OTP设计原则:Gen_Event 行为
4 Gen_Event 行为这一章应该与gen_event(3)结合起来看,gen_event(3)对所有接口函数和回调函数都有详细描述. 4.1 事件处理原则在OTP中, an event manager is a named object to which events can be sent. An event could be, for example, an error, an...2007-06-22 11:59:09 · 187 阅读 · 0 评论 -
OTP设计原则:Supervisor行为
5 Supervisor Behaviour This section should be read in conjunction with supervisor(3), where all details about the supervisor behaviour is given.这节应该和supervisor(3)结合来读,所有关于supervisor行为的细节都在那儿。5.1 S...2007-06-22 12:15:29 · 378 阅读 · 0 评论 -
echo_server
代码 -module(echo_server). -export([start/0,stop/0]). -define(LISTEN_PORT,12345). % 开放端口 -define(MAX_CONN, 5000). % 最大连接数 start() -> ...2007-06-23 14:45:30 · 346 阅读 · 0 评论 -
erlc
erlc命令 erlc 概要编译器 描述The erlc program provides a common way to run all compilers in the Erlang system. Depending on the extension of each input file, erlc will invoke the appropriate compiler....2007-06-24 15:08:08 · 760 阅读 · 0 评论 -
erlang网络编程的几个性能调优和注意点
前些天给echo_server写了个非常简单的连接压力测试程序,代码 -module(stress_test). -export([start/0, tests/1]). start() -> tests(12345). tests(Port) -> ...2007-06-26 09:56:25 · 347 阅读 · 0 评论 -
OTP设计原则:应用
7 ApplicationsThis chapter should be read in conjunction with app(4) and application(3). 7.1 Application ConceptWhen we have written code implementing some specific functionality, we might want to...2007-06-27 00:32:31 · 265 阅读 · 0 评论 -
ubuntu安装otp R11B 的一些记录
新的ubuntu系统会缺少一些工具 和lib. 用apt-get来获得apt-get install build-essentialapt-get install libncurses5-devapt-get install m4apt-get install libssl-dev接着再编译就okay了. 运行# erl1> appmon:start().会发现界面没...2007-11-16 12:30:22 · 139 阅读 · 0 评论