Erlang-China

erlang 中文社区

Erlang Gtalk 讨论群10月份聊天记录


Erlang Gtalk 群 10 月份聊天记录整理

2007-10-02 12:00:42 coderplay,你现在作什么?
2007-10-02 12:00:48 不扯J8鸟语啦, 我做流媒体服务器
2007-10-02 12:00:53 开了个头
2007-10-02 12:01:00 哈哈,我作即时通信
2007-10-02 12:01:07 分众WEB即时通信
2007-10-02 12:01:12 准备去金山之后正式写
2007-10-02 12:01:17 分众?
2007-10-02 12:01:32

ery.lee 也是用ejabbrd吗?
2007-10-02 12:01:38 没有
2007-10-02 12:02:07 我自己写了一个完全基于WEB的即时消息路由引擎
2007-10-02 12:02:17 WEB服务器是用RAILS写的
2007-10-02 12:02:36

coderplay 我问你一个问题,在不同节点上的node间发信息,1秒只有5000,,。。有没有提高的办法??
2007-10-02 12:03:05 貌似node间发消息的性能问题在maillist有讨论
2007-10-02 12:03:23

是吗?我在找呢,找了半天找不到
2007-10-02 12:03:27 coderplay, 我现在想增加语音视频功能, Erlang是否可以支持?
2007-10-02 12:03:30
2007-10-02 12:03:35

这个问题好头痛
2007-10-02 12:03:39 可以啊
2007-10-02 12:03:50 只要支持协议就行
2007-10-02 12:04:01 实际还是数据分流
2007-10-02 12:04:20 播放audio/video 的,是播放器
2007-10-02 12:04:25 客户端的事
2007-10-02 12:04:48 我希望前台用Flash, 做在WEB上
2007-10-02 12:05:38 我就是做这个
2007-10-02 12:05:41 rtmp协议
2007-10-02 12:05:42 支持flv
2007-10-02 12:05:52 参考red5实现
2007-10-02 12:06:15 如果实现语音通话,需要支持SIP吧?
2007-10-02 12:06:27 与RED5的视频服务还不一样
2007-10-02 12:07:01 你要做啥?
2007-10-02 12:07:13 即时通信的语音通话
2007-10-02 12:07:46 rtmp也可以实现 :)
2007-10-02 12:08:32 我 google一下
2007-10-02 12:09:44 panxiaof , 这个问题是不是根你类似.http://www.erlang.org/pipermail/erlang-questions/2007-September/029039.html
2007-10-02 12:14:49 coderplay, rtmp好像不适合

2007-10-03 11:21:10 f(M), receive M -> M end. 这个是什么语法?f是哪来的呢
2007-10-03 11:22:52 刚找到这个用法,可以在erl的shell上接收消息,怎么没看到哪提过这个用法
2007-10-03 11:29:43 原来是个简单用法。f移除原来的绑定。

2007-10-10 09:30:59 Haskell Workshop 2007 with videos ,格式为 mov , 地址为 : http://www.ludd.ltu.se/~pj/hw2007/HaskellWorkshop.html
2007-10-10 09:34:54 good.
2007-10-10 09:35:06 and erlang workshop 2007?
2007-10-10 09:35:23 reading the document
2007-10-10 09:35:29 introduce later
2007-10-10 13:59:48 Ok
view this now, i have post it to erlang-china : http://erlang-china.org/misc/erlang-workshop-2007-issues.html
or , for guys dont speak Chinese , go to erlang-question maillist , search this title “Erlang Workshop 2007″
2007-10-10 14:00:27 :)
2007-10-10 14:04:34 辛苦了
2007-10-10 14:05:00 好东西,已经下载完毕。:D
2007-10-10 14:05:30 you mean the workshop held in Freiburg?
2007-10-10 14:05:48 yep
2007-10-10 14:07:43 nice job, man. i’ll check it later
2007-10-10 14:07:44 anyway, thanks a lot
2007-10-10 14:08:02 据说这个workshop已经开了13年(届)。
2007-10-10 14:08:19 also i have post the photos of this workshop before
2007-10-10 14:08:31 呵呵,毕竟erlang已经二十年了呀
2007-10-10 14:08:53 to cube: where’s the link?
2007-10-10 14:09:48 http://www.flickr.com/photos/rich_4711/sets/72157602309315717/
2007-10-10 14:11:12 你的相册.
2007-10-10 14:11:32 不是我的
2007-10-10 14:13:18 oh i see
2007-10-10 17:38:36 http://erlang-china.org/news/erlang-fans-fair-schedule.html
2007-10-10 17:38:41 “【第二届】Erlang Fans交流会”议程
2007-10-10 17:44:10 jackyz没有参与么?
2007-10-10 17:44:28 哦,他周末没有时间。
2007-10-10 17:44:40 可惜啊。
2007-10-10 17:44:42 嗯,周末没有时间,很遗憾
2007-10-10 17:45:05 albert Lee 是?
2007-10-10 17:45:31 这边次于我的一个小胖子
2007-10-10 17:45:33 hanzhupeng@gmail.com
2007-10-10 17:49:26 总人数大概多少个?
2007-10-10 17:50:14 20左右吧。
2007-10-10 17:50:48 :) 有没有来自北京上海等地的朋友
2007-10-10 17:51:00 我有点事情先走了,88
2007-10-10 17:51:21 no
2007-10-10 17:51:26 大家都很忙,来不了
2007-10-10 17:51:59 据说有白饭吃?
2007-10-10 17:52:38

ai~~~什么广东比北京热闹呢。。。
2007-10-10 20:22:18 erlang的进程切换开销有多大啊?
2007-10-10 20:22:46 要收消息还得在线
2007-10-10 20:42:58 erlang在我的机器上进行两万次进程切换需要5.55ms的时间,这个数字应该差不多吧
2007-10-10 20:46:30 恩 这个还是比较逼真的
2007-10-10 20:46:55 应该用fiber切换还会更快一些
2007-10-10 20:47:07 应该会有一个数量级的提高
2007-10-10 20:47:34 5 * 1000 /20000 = 2.5 us
2007-10-10 20:48:04 应该差不多 erlang的process 调度 个人感觉还有很多可以改进的地方
2007-10-10 20:48:05 我的cpu时钟是1g
2007-10-10 20:48:29 差不多每个进程切换花了50000个cpu时钟
2007-10-10 20:48:40 好像多了点
2007-10-10 20:49:46 1us = 4000mps 2.5us = 10000 mps
2007-10-10 20:50:20 应该要再能快点
2007-10-10 20:50:31 不过这个性能已经能满足需要了
2007-10-10 20:50:45 有没有好用mysql库?
2007-10-10 20:50:48 erlang的
2007-10-10 20:51:08 ejabberd带了一个比较简单的driver
2007-10-10 20:51:23 好的,我看看
2007-10-10 21:08:45 http://www.erlang.se/euc/07/cfp.html

2007-10-11 11:08:04 yaws有windows版本吗?
2007-10-11 11:09:02 很奇怪?erlyweb有Windows版本,为什么yaws没有
2007-10-11 11:32:10 http://cean.process-one.net/download/ 那里有yaws,erlyweb的cean win版本下载
2007-10-11 11:32:46 谢谢
2007-10-11 11:34:03 这是是以为cean有win版本的。yaws没有吧。还有erlyweb没有win,linux版本之说吧。erlyweb不就是一个框架么。
2007-10-11 11:34:17 i’m right?
2007-10-11 14:26:59 *** joins this room.
2007-10-11 14:37:28

一个Erlang节点可以在另一个-Erlang节点上创建自己的并发进程,而子进程所在的节点可能是运行其他的操作系统的服务器。不同节点的之间的可以进行极为高效而又精确的通信,就像它们运行-在同一个节点一样。
其实我觉得erlang节点与节点的效率是不是不太高
2007-10-11 14:38:09

有谁能证明erlang节点与节点间的效率是比较高的?
2007-10-11 14:38:56

1秒钟5000个mesage 的cast~..好像不快吧
2007-10-11 14:39:52

如果message里有是一个比较复杂的tuple结构,好像情况马上就更恶化
2007-10-11 14:41:08

1秒只能发1500来条{node(),node(),”gggggggggggggggggggggggggggggggg”}
2007-10-11 14:48:33 如果做服务端的话,是不是从gen_server开始啊?
2007-10-11 14:48:54

不一定`
2007-10-11 14:49:38 gen_server不是通用服务端吗?
2007-10-11 14:50:11

我是更认为是串行服务端~
2007-10-11 14:50:45 被误解了,gen_server是服务提供端,不是服务器的意思。。
2007-10-11 14:50:57 为什么啊?
2007-10-11 14:51:22 你用一下就知道咯
2007-10-11 14:51:51 !!运算符是不是只是一个概念,还没实现啊
2007-10-11 14:52:10

有谁知道gen_server的 hadle cast,与handle_info是不是一样的??
2007-10-11 14:52:39 晕,差很远啊,handle_info是处理直接 ! 过去的message
2007-10-11 14:52:51 自己用erlang做并发服务器还算容易,用gen_server就麻烦了,搜索一下就知道了,有几个实现看着也不舒服
2007-10-11 14:53:42 呵呵,为啥觉得gen_server麻烦呢?
2007-10-11 14:53:52

你不用gen_server,那你也不用什么fsm server也不用什么supvisior了~~那做出来的东东不好用吧
2007-10-11 14:54:36

to AvinDev..我看看gen_server源码先~~eheh
2007-10-11 14:54:42 {ok, Bin} = “/home/joe/abc” !! read不能执行为什么?!!运算符是不是没实现
2007-10-11 14:55:27

….这个写法。。。怎么编出来的啊。。。
2007-10-11 14:55:32 你在哪儿看到 !! 这样的用法的?
2007-10-11 14:55:57 某paper提出了用 !! 实现 message 优先级的提议
2007-10-11 14:56:04 估计是那篇论文.
2007-10-11 14:56:06 面对软件错误构建可靠的分布式这本书啊
2007-10-11 14:56:40 那个写在哪一节?
2007-10-11 14:57:24 10.2 关于将来工作的想法
2007-10-11 14:57:29 第10章,文件与bangbang
2007-10-11 14:59:10 为啥觉得gen_server麻烦呢?
2007-10-11 14:59:26 有点好奇,为啥会这么觉得?
2007-10-11 14:59:34 我也很想知道啊
2007-10-11 14:59:46 到erlang china 也blah一下吧
2007-10-11 15:00:13 呵呵。。。是咯。
2007-10-11 15:00:38 在OTP系统中,Erlang模块gen_server用来构造客户-服务器的服务器模块。gen_server可以通过许多不同的途径被参数化成许多不同类型的服务器。这是原作者说的啊!
2007-10-11 15:01:07 这个服务器不是网络服务器的概念:)
2007-10-11 15:01:57 gen_server只有一个进程,它的状态也只有一个,并发服务器的状态通常是每连接一个
2007-10-11 15:02:22

gen_fsm就可以了~
2007-10-11 15:02:50 怎么把连接区分开?
2007-10-11 15:02:59 ?state可以是一个set,dets,乃至mnesia的table,或者mnesia的实例本身,何来状态只有一个这么一说?
2007-10-11 15:03:00 openpoker用的是什么?
2007-10-11 15:03:07

一个连接一个gen_fsm
2007-10-11 15:03:13

就这么easy~
2007-10-11 15:03:48 只有一个进程在处理它
2007-10-11 15:04:01 一个连接一个gen_fsm,你和gen_server做到一起就知道了
2007-10-11 15:04:18 so,一个进程在处理它会造成什么问题?
2007-10-11 15:04:19

。。
2007-10-11 15:04:23 google:gen_server socket
2007-10-11 15:04:26 gen_server是不是只是提供状态服务而不是网络服务
2007-10-11 15:04:32 看看给出来的几个结果是如何实现的
2007-10-11 15:04:57 gen_server是象ejb的container这样的概念
2007-10-11 15:05:21 每来个连接你就在这个状态表(比如是ets)里做一次查找,本来用erlang直接spawn做状态这么直接的,结果到gen_server里就这么难受
2007-10-11 15:05:23 ioriyashino,它只是一个调用框架,功能性的代码是你自己写的。
2007-10-11 15:05:53

有状态的话用gen_fsm
2007-10-11 15:06:00 可能要用代理才能打开,trapexit.org也被和谐了
2007-10-11 15:06:45 cpunion,你的意思是它是类似于stateless的感觉,这让你觉得不爽,是这么理解么?
2007-10-11 15:07:17 可能要用代理才能打开,trapexit.org也被和谐了
不明白什么意思?用gen_server实现的服务端需要用代理链接?
2007-10-11 15:07:38 http://213.171.204.166/ 可以访问 trapexit.org
2007-10-11 15:08:03 貌似是avindev 的招
2007-10-11 15:11:35 找不到简单的说法。这么描述下:erlang里面做并发服务器最直接的方法是spawn,每连接一个进程,状态都在进程内。用gen_server以后,消息都发给一个进程了,你得在这个进程内部维护的状态里面做一次查找,先找到相应的处理器(或进程或状态机),gen_server没有帮你完成这个工作,而spawn打开的进程本来就有这功能了。
2007-10-11 15:12:22 效率上,在多处理器机器上,所有事件都先发给一个进程再分发的效率是有降低的,多一次集合就多一次开销,再加上前面查找处理器的开销。
2007-10-11 15:12:31

..你要好好看看OPT..genserver本来就不是这样用的
2007-10-11 15:12:55 是指gen_server 用来做网络服务器吧,感觉不合适
2007-10-11 15:13:17 你把搜索到的几篇文章看一下就知道他们为什么做得这么难看了
2007-10-11 15:15:00

en..好奇怪,,感觉大家都没看过OPT似的~~
2007-10-11 15:15:00 你指的是哪几篇?我和panxiaof的感觉相似,这好像并不是用gen_server的场景。
2007-10-11 15:16:06 我的观点和你们是一致的呀,是回答前面问的,为什么gen_server不适合的问题。“不是用它的场景”的意思难道不是这个?
2007-10-11 15:16:24

一个服务器,般都OPT里的每一个东东,都会用上。。代表用户连接对应的一股会有一个gen_fsm
2007-10-11 15:16:40

有占事,出去一下~
2007-10-11 15:17:58 谢谢,我再好好看看opt的文档
2007-10-11 15:18:10 我的意思是,要跟踪多个并发的用户,比方,yaws处理每一个http request,实际上也是spawn一个process来处理的,这种情况没有必要用到gen_server,所以我说没有见到这种情况必须要用gen_server的必要。
2007-10-11 15:21:01 spawn不是还有个进程生存期的问题嘛,想把它和gen_server结合起来是因为它提供了一个进程管理,这和我们监听一个端口的需求看起来很相似。这也是那几篇文章尝试的原因嘛。
2007-10-11 15:24:51 没有搞清楚具体的需求,不好再怎么分析了。就是觉得有点奇怪,我用gen_server没觉得哪里不好用啊,怎么似乎总能听到人说不喜欢呢?
2007-10-11 15:25:16 没有谁说不喜欢吧?
2007-10-11 15:25:38 有,上次看到一个老外的博客也这么说。
2007-10-11 15:25:55 报怨看起来难看云云
2007-10-11 15:26:11 对gen_server期望太高了。。
2007-10-11 15:26:20 hoho
2007-10-11 15:26:54 你的具体需求呢?如果拿来分析分析,没准是个不错的案例。
2007-10-11 15:26:59 难看好像joa有解释的,因为当年做behaviour时,有个什么特性没有加进来。忘了
2007-10-11 15:28:45 如果用erlang做网络游戏服务器?
2007-10-11 15:28:57 百万级在线
2007-10-11 15:29:22 就是个TCP服务器,我需要Server=my_server:start(Port)启动它,my_server:stop(Server)就停止,其它部分,当然也想享受一下热升级、服务挂掉重启等功能。然后handle_call里面不是一个共享的状态了,那个状态是每个连接各自的状态。
2007-10-11 15:30:11 ioriyashino,你这个问题恐怕要找yufeng他们好好问问才行,不过他们不一定会告诉你啊。:D:D
2007-10-11 15:30:21 我感觉做网游没什么前途。目前大部分网游都是简单的网络框架,逻辑部分甚至是单线程的(为了避免锁),一个服务器就跑两个进程,一个处理网络一个处理逻辑
2007-10-11 15:31:18 做其它应用有前途,做网游有钱途,呵呵
2007-10-11 15:32:23 cpunion,你这个 tcp 服务器的调用接口是怎样的呢?比如说,通过socket来调用,通过erlang的 myserver:call(xxx) 来调用?你提到状态,这个状态是调用端的状态还是服务端的状态?
2007-10-11 15:32:24 做网游是可以,但是人力成本高啊,stackless python就做了个eve出来,重要的是总体架构
2007-10-11 15:32:44 哦。。是说我感觉erlang在网游上面没什么用武之地。。网游主要是逻辑部分计算量大,所以都用单线程
2007-10-11 15:33:25 erlang效率还是不太高,比起python是高一些(我测试的)
2007-10-11 15:33:35 嘿嘿。avindev和yufeng同学他们可是专干这个的哦。
2007-10-11 15:33:55

你说的是一方面 但是如果 一个服务器 容纳的人多了 这对 游戏的 影响 可不是 一星半点的
2007-10-11 15:34:33 这个云风好像写过一篇,虽然一个服务器人多看起来很吸引人,但只是对于技术人员来讲,实际并不是这样。。
2007-10-11 15:34:35 其实这个问题很现实啊,同样一种应用,用java开发会有人投资的,用erlang,难说。如果用erlang开发出成功的网游服务端,erlang就会火起来的
2007-10-11 15:34:46 网易买了big world的,听说没用上。
2007-10-11 15:37:25 big world的客户端做的不太好,其实服务端有些设计还是不错的
2007-10-11 15:51:48 个位都有谁是做游戏的?
2007-10-11 15:52:13 我,不是,哈哈
2007-10-11 15:52:45 以前做过休闲游戏,赌场用的,视频百家乐。现在没做了
2007-10-11 15:53:04 我是做客户端的,服务端刚接触
2007-10-11 15:54:09 现在主要也是做服务端程序,不是游戏,网站底层服务,存储搜索一类的
2007-10-11 15:54:55 哇塞,视频百家乐,赚不少吧。
2007-10-11 15:55:51 公司赚了而已。国外赌场用的
2007-10-11 15:56:08 羡慕做网络开发的。 :)
2007-10-11 15:56:44 做网络开发的公司很多啊,可以专职:)
2007-10-11 16:00:09 把逻辑和数据分开处理行吗?erlang做数据传输,c处理逻辑
2007-10-11 16:01:34 我也这么打算呢,公司有个项目,网络部分分配给另一个同事了,看起来他压力比较大,打算用erlang搞个原型看看;-)
2007-10-11 16:02:19 erlang做io并不快
2007-10-11 16:02:50 用Erlang做数据传输的想法是可以实行,起码比做密集计算靠谱:)
2007-10-11 16:02:52 erlang做并发、分布、集群和负载均衡,c处理逻辑
2007-10-11 16:03:04 erlang擅长的是做分布式处理,比如,把一个任务分解到多个机器上并行
2007-10-11 16:04:04 其实io主要是数据库操作,应该能解决
2007-10-11 16:06:26 客户端也来一个erlang节点,客户端的数据传给erlang节点,erlang客户端节点在传给服务端节点,这个思路可行吗?大家提提意见
2007-10-11 16:06:47 嗯,其实就是一个涉及rpc系统的设计问题,良好设计的架构是会尽可能的减少rpc的数量,如果你的系统有大量的rpc要通过网络,那无论是erlang或者是c,这样的设计本身都是有优化空间的。
2007-10-11 16:07:36 这要看你的应用场景,erlang要做的什么角色?是一个rpc?还是“任务调度”
2007-10-11 16:07:45 现在这个项目主要是好多服务器之间要建立长连接,一部分管理节点要知道其它节点的状态,感觉就是为erlang搭建的环境。erlang自己实现的TCP服务器我测试过效率还是很高的,长连接单机每秒发送达到过7万,那是拿他写压力测试程序时测试的。
2007-10-11 16:07:59 又或者是“大量数据的传输机制”
2007-10-11 16:08:02 如果客户端节点感应到其它客户端节点在同一网段上,就不通过服务端了
2007-10-11 16:08:20 前面有讨论说每秒才5000,我感觉不大可能吧
2007-10-11 16:09:01 虽然用“!”发送会有序列化的开销,不过我的测试数据比那个要大
2007-10-11 16:11:48 http://www.javaeye.com/my_topic/125571
2007-10-11 16:12:27 那位能帮我看看下面这个命令是哪里错了
2007-10-11 16:12:29 webtool:start(standard_path,[{port,8888},{bind_address,{192,168,52,16}},{server_name,localhos
t}]).
2007-10-11 16:13:13 其实我感觉用erlang可以快速开发,这就是很大的优势,用c或c++开发的成本更高,erlang的不停机升级就是巨大的优势
2007-10-11 16:20:55 又没动静了:(
2007-10-11 16:21:02
2007-10-11 16:21:16

我来了`继续讲OPT了~
2007-10-11 16:21:16

hehe
2007-10-11 16:21:31 otp?
2007-10-11 16:21:41

我的意思是,要跟踪多个并发的用户,比方,yaws处理每一个http request,实际上也是spawn一个process来处理的,这种情况没有必要用到gen_server,所以我说没有见到这种情况必须要用gen_server的必要。
….就从这话话开始吧
2007-10-11 16:22:38 这个不停机升级代码,代码会保存两份。一份老的,一份新的。但是,要让代码可以动态部署,写代码还得特别主意,不要忘记module:method。而且,你还得保证第三次不停机升级代码的时候,第一份代码没有程序会调用,要不然会出错。
2007-10-11 16:23:32

。。好像人都不在~~。。
2007-10-11 16:23:56 主要是缺乏测试数据
2007-10-11 16:24:22
2007-10-11 16:24:28 继续继续otp
2007-10-11 16:25:06

好像不知道要讲什么了~
2007-10-11 16:25:20 比如erlang的分布式的数据库,它是为每个客户端都复制一张表吧?
2007-10-11 16:25:24 还是要场景分析好@.@
2007-10-11 16:25:34 你的应用,需求是怎样的,
2007-10-11 16:26:17 然后我们再一起合计合计,是用gen好呢,还是直接上spawn
2007-10-11 16:26:35

对了,我的一个节点需要另外两个节点的上表~~这个怎么弄啊
2007-10-11 16:27:06

肯定是OTP自个已经弄好的东东好
2007-10-11 16:27:38

不然后线程监控,自动重启。。这些好处。。你都没有了。。
2007-10-11 16:28:26 还是没听到你的应用场景啊,没需求,咋知道方案是不是。。。合理?
2007-10-11 16:29:29 两个远端的节点表的传输率有多少啊?比如一个节点对表进行了修改,多长时间另一个节点会知道啊?谁做过测试
2007-10-11 16:29:36

这个东东是不是cpunion提出来的
2007-10-11 16:30:15 晕了,cpunion同学闪了?
2007-10-11 16:30:19 那到未必,还是要看场景…
比如我用一个udp端口和很多的client通信,收到一个udp包,我spawn出一个process去parse,match到一个client的process上,要是parse,match没成功,不就写log,然后自己退出就完成了…为什么要监控,重启?
2007-10-11 16:30:43 忙起来了。。有空再继续
2007-10-11 16:31:10

不过你自个要spwan一个东东,你的supvisor还是要实现gen_server那样的接口,才能监控的
2007-10-11 16:31:23

被监控的吧
2007-10-11 16:31:50 不需要呀…为什么要监控一条这样的process?
2007-10-11 16:32:08 不会,spawn_link 或者 spawn 再 link 都能被监控的。当然了,监控就是 exit 而已。
2007-10-11 16:33:47 cpunion同学有空了把你的应用场景整理整理贴到erlang-china.org上,咱们好好分析分析,这是个好的casestudy啊
2007-10-11 16:34:26

这样一来,你自个要对exit做各种处理,很麻烦的。。你用了gen_server..supviosor里写了一行话。。就可以实现可种方式的exist.,,比如你exist了替你重启,你重启实在太多了,那就帮你杀了还是把我自个也杀了,等更上一层的supviosr来处理
2007-10-11 16:35:45 panxiaof,对于我所说的场景,没有重启的必要吧。
2007-10-11 16:35:52 可是,parse一个package这样的琐碎任务,失败了我咋重启?
2007-10-11 16:36:03

Otp帮你想好了各种模型,你把你的应用往它上面靠就是了,不需要自个用spawn_link,然后处理exist
2007-10-11 16:36:46

就是上层的supviosr帮你重启啊
2007-10-11 16:36:51

自动的
2007-10-11 16:37:26 囧rz…比如我收到了一个垃圾包,parse失败…那么重启的state是什么?
2007-10-11 16:38:34

上层的supviosr会记3住你启动时的参数,再给你重启一下
2007-10-11 16:38:59 好啊。可以先简单理解成我要做成个web server(协议部分先不理了)这种并发的服务器,协议需要状态机来处理,它要有错误重启,热代码升级。实际调用是这样的:my_server实现gen_xxserver:listen(Port, ProtocolHandleModule,ProtocolType),可以listen几个,每个Port使用不同的ProtocolType,但ProtocolHandleModule可以是一样的,也就是我的协议只是格式不同但可以解包相同内容。最后把gen_xxserver:start()起来。
2007-10-11 16:39:09 我启动的参数自然就是这个包么…
2007-10-11 16:39:14 这是目前我们一个实际应用,用C++实现的
2007-10-11 16:39:16

要是人说的包在对应一个用户的话,你可能的配置出错了就直接不让重启了。
2007-10-11 16:39:26 先说这些了,忙去了,有空你先看看。
2007-10-11 16:40:07 supervisor管理和监控的应该是大的组件,比如,你的应用有n个server,那么某个server crash了我需要supervisor帮我重启,但对某个server来说,我可能启几十上百个process来处理某些具体的数据,这样的process,失败了该怎么处理就怎么处理,如果纳入supervisor来处理,就太烦琐了。
2007-10-11 16:40:57

这话好像不是这么讲,这么说吧,ejabber如果你有1W人在线,那他就有1W个gen_fsm
2007-10-11 16:41:06 有搞 软件得吗?
2007-10-11 16:41:06 有搞 软件得吗?
2007-10-11 16:41:24 囧rz,我们是在被软件搞
2007-10-11 16:41:33 …..啊..
2007-10-11 16:41:45 现在学习编程 搞这个行业好吗?
2007-10-11 16:43:18 对ejabber的一个client,可以对应一个gen_fsm…但是,对于一个client产生的包,对应的process。。。可以是10倍于client数哦…
2007-10-11 16:43:37 不懂。
2007-10-11 16:43:39 每个client一个fsm?这些fsm也都是被supervisor管着的么?我看看supervisor的文档先,好像搞起来没那么好搞啊。
2007-10-11 16:44:02

是的,都被supervisor管着
2007-10-11 16:45:11 一个client对应一个fsm是没问题的… 问题是,有很多process根本不用管… 丫爱干嘛干嘛去…
2007-10-11 16:45:13

supervisor还有一种模式叫simple_one_to_one..就是专门针对这种上W的process来弄的
2007-10-11 16:45:47

差不多simple_one_to_one就是你爱做什么就做了~~
2007-10-11 16:46:14

要不就前面就不带simple了~
2007-10-11 16:46:53 那对于一个不需要重启,不需要监控的process,用otp比不用有什么好处?
2007-10-11 16:47:00 If the case of a simple_one_for_one supervisor, the child specification defined in Module:init/1 will be used and ChildSpec should instead be an arbitrary list of terms List. The child process will then be started by appending List to the existing start function arguments, i.e. by calling apply(M, F, A++List) where {M,F,A} is the start function defined in the child specification.
2007-10-11 16:47:20 你说得没错,这个simple_one_to_one可以这么用
2007-10-11 16:49:09

{ok, {{simple_one_for_one, 10, 1},
[{undefined, {Module, start_link, []},
temporary, brutal_kill, worker, [Module]}]}}.
2007-10-11 16:49:47 嗯,但我仍然觉得不是所有的process都有必要按otp的principles来做。比如NetSnail提到的一些做琐碎操作的process,比如parse package的那些,就没有这个必要。
2007-10-11 16:51:47 用otp的好处是它已经很好的处理了诸如代码热替换这样的特性
2007-10-11 16:52:12

我也不知道,我就看过那个ejabberd.他的pase package也是被supvisor的
2007-10-11 16:52:35 应该是因为,他那个是tcp吧…
2007-10-11 16:52:45

en~
2007-10-11 16:53:40
tcp的话,反正是在一个stream做解析,而且不用做package到session的match,自然是用一个比较持久的process来处理比较好
2007-10-11 16:54:09
joe有篇文章说过一个问题,register,spawn这些是有sideeffect的代码,使用otp的目的之一就是要尽量减少这些代码的出现。
2007-10-11 16:54:11
我看的yxa的代码,里面处理udp包就是直接搞一个process的.
2007-10-11 16:55:23
是的,我以为,这个问题不可绝对化,inets的httpd也是直接spawn的,可能otp本身也是有开销的,
2007-10-11 16:56:28
不是的。。。httpd的handler。。用了个enter_loop..
2007-10-11 16:56:35
是gen_server 来的.
2007-10-11 16:57:21
??
2007-10-11 16:57:26
check下
2007-10-11 16:57:59
-module(httpd_request_handler).

-behaviour(gen_server).
2007-10-11 16:58:48 他是先自己spawn,做完比较负责的init后,在enter_loop…
2007-10-11 16:59:02 他是先自己spawn,做完比较复杂的init后,再enter_loop…
2007-10-11 16:59:09 囧,错别字T.T
2007-10-11 17:01:03 erlang支持BSD Socket API 吗?
2007-10-11 17:09:18 呼,找半天,我们说的不是同一个东西。我说的是ESI模块,你说的是request_handler
2007-10-11 17:09:32 -module(mod_esi).
2007-10-11 17:09:48 Pid = spawn_link(
fun() ->
case catch Mod:Func(Self, Env, Input) of
{’EXIT’,{undef,_}} ->
%% Will force fallback on the old API
exit(erl_scheme_webpage_chunk_undefined);
_ ->
ok
end
end),

Response = deliver_webpage_chunk(ModData, Pid),

2007-10-11 17:10:55 每一个对mod的处理,即,你自己写的mod,都是在一个spawn出来的process中运行的,这个过程很象servlet处理process的步骤。
2007-10-11 17:13:16 anyway,这类直接使用spawn的情况,还是不少的。
2007-10-11 17:13:28 @.@
2007-10-11 17:14:39 当时在yaws下一顿瞎找啊,还自己写了一个,发现httpd早就有了,那叫一个郁闷啊。
2007-10-11 17:14:53 记忆深刻
2007-10-11 17:28:41

我碰到一种情况,两机子的两个节点间发信息, {node(),”aaaaaaaaaaaaaaaaaaa”}
数据还可以,{node(),node(),”aaaaaaaaaaaaaaaaaaaaaaaa”}速度就奇慢,
2007-10-11 17:29:05

有谁能知道这一情况吗?
2007-10-11 17:29:38 不知道,如果去掉node()呢?会变快么?
2007-10-11 17:30:44 有可能是上次说的那种情况,你的receive没有匹配这个消息,所以进程邮箱消息很多以后,每次都要重新匹配所有消息
2007-10-11 17:31:54

很简单的一个程序,我就专门测试一下写的,为什么{A,B}快,而{A,B,C}就奇慢呢(好像就是这样子的)
2007-10-11 17:32:16 receive里面是怎么写的?还是说发送一端慢
2007-10-11 17:32:28

我在接收端什么也没做。就直接ok了
2007-10-11 17:32:41

recvie->
any->ok
2007-10-11 17:34:28 any是个atom吧,匹配不了你上面那些数据呀。不过没办法解决为什么后面一个慢一些,仅仅是消息大一点?
2007-10-11 17:34:34 改成Any
2007-10-11 17:34:37 或_
2007-10-11 17:34:49

错了,就是Any
2007-10-11 17:35:05 打车问一句,都没有匹配上的消息,为什么不扔了?非要留着下次来一遍?
2007-10-11 17:35:28 因为可能下一个循环进到另一个分支了,需要处理它
2007-10-11 17:35:46

receive
_Any->ok,这样就直接扔了吧,难道还在?
2007-10-11 17:36:11 不在。我测试看看,你测试会慢多少?
2007-10-11 17:37:38

发送3000条还可以,发送10000,好像等了半天没结果,
2007-10-11 17:39:17

我就是把问题说一下:),有人知道更好,没人知道也没关系了:)
2007-10-11 17:39:48 嗯,有意思,我也来测一下看看。
2007-10-11 17:44:16 知道了,匹配的时候有条件的。第二次可能条件就成立了。比如when X>2.。thx
2007-10-11 17:45:34

??
2007-10-11 17:46:00 搭车问一句,都没有匹配上的消息,为什么不扔了?非要留着下次来一遍?

2007-10-11 17:46:03 这个
2007-10-11 17:47:03

你是说erlang为什么这样设计消息box吗?
2007-10-11 17:57:01 我试了一下,没你说的问题啊
2007-10-11 17:57:26 10000次send,453毫秒
2007-10-11 17:57:27

你是两服务间的吗?
2007-10-11 17:57:35 ofcourse
2007-10-11 17:57:54

你那怎么这么快?有没有弄错啊~
2007-10-11 17:58:09 那还很快。我是感觉不会慢到才5000
2007-10-11 18:00:21

我好好看看我的程序~是不是我真的弄错了。。不过无论我是不是弄错了,我当中加了一个”字段“后,速度是直线下去了
2007-10-11 18:00:56 你可以把程序发到group论坛上面,让大家看看
2007-10-11 18:01:24

en~~我回去整理一下~
2007-10-11 18:01:24 我上次用erlang做压力测试,4CPU机器上发送每秒有7万个包,每个256字节,回复也是256。把我的C程序CPU跑到160%了,其它测试工具单台最高只能把它压到60%左右。
2007-10-11 18:02:22

160%???
2007-10-11 18:04:06 4CPU上,最高是400%,linux下
2007-10-11 18:04:07 -module(tr).
-export([start/0]).

start() ->
register(tr, self()),
t_loop().

t_loop() ->
receive
Any ->
io:format(”~p~n”, Any),
t_loop()
end.
2007-10-11 18:04:16 -module(ts).
-export([start/0]).

start() ->
statistics(wall_clock),
t_send(10000),
io:format(”~p~n”, [statistics(wall_clock)]).

t_send(0) ->
ok;
t_send(N) ->
{tr, ‘tr@192.168.0.40′} ! {node(), node(), “data”},
t_send(N - 1).
2007-10-11 18:04:38 就是这两小段
2007-10-11 18:05:08

我也拿你的去试试
2007-10-11 18:11:52

那个gen_server的源码,在otp_src_R11B-4里的哪一块里头?
2007-10-11 18:12:04

找不到:(
2007-10-11 18:12:09 kernel
2007-10-11 18:13:03 stdlib
2007-10-11 18:13:09 错了
2007-10-11 18:14:06 erl5.5.5\lib\stdlib-1.14.5\src
2007-10-11 18:14:24

找到了:)
2007-10-11 19:53:05 erlangchina的邮件怎么都是乱码啊?
2007-10-11 21:40:19

有人在吗?
2007-10-11 21:41:14

晚上的时候讲了一个两服务器传消息很慢的问题,描述有点不当,刚才又测试了一下,可以归纳出问题的所在了
2007-10-11 21:42:11

看来没人在:9
2007-10-11 21:42:12

::))
2007-10-11 21:43:03 我在,但是不知道是什么问题
2007-10-11 21:44:25

就是两机器上的nodes间发消息时,当消息长度超过一定长度时,消息就发不出去了,变得很慢
2007-10-11 21:45:07 不知道是怎么回事。。。
2007-10-11 21:45:24 有人用mnesia做数据库吗?
2007-10-11 21:45:44 语法很爽,但是不知道是否成熟
2007-10-11 21:45:59

1000长度的字符,一秒可以发5000次,可是当变成1200长度时,不发得很慢很慢,
2007-10-11 21:46:12 为什么呢?
2007-10-11 21:46:12

mnesia我用过
2007-10-11 21:46:31 能在商业上用吗?
2007-10-11 21:46:40 分布式的,应该很爽
2007-10-11 21:46:46

听说可以,
2007-10-11 21:47:04 和web结合好像有点麻烦啊
2007-10-11 21:47:20

web也用yaws啊~
2007-10-11 21:47:37 我不会web了,都是别人做
2007-10-11 21:47:58

哈,那你可以用mysql
2007-10-11 21:47:58 要么用yaws做个链接,让web来查?返回xml?
2007-10-11 21:48:22 mysql在erlang上用起来就没有这么爽了
2007-10-11 21:48:30

yaws是erlang的网页服务器
2007-10-11 21:48:51 知道的
2007-10-11 21:50:19 要么就odbc好了。。。
2007-10-11 21:50:41

我也没用过:(
2007-10-11 21:51:04 自己做数据库的分布式,太麻烦了
2007-10-11 22:20:29 调用 ZODB 的 ZEO 对象好了
2007-10-11 22:20:45 自然分布的,压力响应也可以

2007-10-12 08:47:53 I played with Google trends. I know one should be
careful about drawing conclusions from it, but…

http://www.google.com/trends?q=smalltalk%2C+erlang
http://www.google.com/trends?q=erlang%2C+ocaml

I also noted that Joe’s book is ranked #86 on the
amazon.com bestseller list (category: computers & internet)

http://www.amazon.com/gp/bestsellers/books/5/ref=pd_ts_pg_4/002-7970867-4196824?ie=UTF8&pg=4

2007 has been a good year for Erlang. (:

BR,
Ulf W
2007-10-12 08:51:42 it seems 2008 would be a better year :)
2007-10-12 08:52:04 i think so
2007-10-12 08:56:38 erlang udp 的穿透能力怎样?
2007-10-12 09:28:11

jackyz.zhao> 在吗?
2007-10-12 09:36:05 i hope it will be a better year
2007-10-12 09:39:53

is anybody here
2007-10-12 09:40:31

我发现了一点现象,不明白为什么~
2007-10-12 09:41:25 erlang udp 的穿透能力怎样?是不是两个远程节点能连上就可以穿透啊?
2007-10-12 09:43:07

我两个机器间发消息,不管消息大小,速度都是5000/秒的样子,可是当消息大到一定值(我的机器是1500字节)的时候,两边cpu就休息了,发上1000条就得等上半天~
2007-10-12 09:44:54

原来网络流量随着包的增加,也相应地增加,100M的网络可以达到50%的使用率,可是当达到这个”界点后“网络也不动了,只有0.5%左右
2007-10-12 09:45:35

我两个机器间发消息,不管消息大小,速度都是5000/秒的样子,可是当消息大到一定值(我的机器是1500字节)的时候,两边cpu就休息了,发上1000条就得等上半天~
原来网络流量随着包的增大也相应地增加,100M的网络可以达到50%的使用率,可是当达到这个”界点后“网络也不动了,只有0.5%左右
2007-10-12 09:46:30 端口用于与外界通信,由内置函数(BIF3)open_port来创建。消息可以通过端口进行收发,但是这些消息必须遵守所谓“端口协议”(port protocol)的规则。erlang 也受udp协议的限制?想穿透防火墙也需要打洞?
2007-10-12 09:47:47 网络流量那个,估计和mtu有关吧.
2007-10-12 09:48:19

是回答我的问题吗?
2007-10-12 09:48:34 只是猜测而已 XD
2007-10-12 09:48:57 没人回答我的问题:(
2007-10-12 09:49:15

你的太难了~哈哈
2007-10-12 09:50:25 erlang节点互联是基于tcp还是udp,还是它自己的协议?
2007-10-12 09:51:40

这个问题比较简单,不过我还是不知道,平时没注意这个东东:(
2007-10-12 09:51:49

不过记得就是TCP的
2007-10-12 09:56:05 我估计也是这样,udp穿透是个大问题,现在好多路由器都做了限制。记得有个新闻就是关于P2P的,有个官员说要在中国限制P2P的发展
2007-10-12 09:56:56 这个,erlang在设计的时候根本就没有考虑的吧.
2007-10-12 09:57:44 erlang是不用考虑,可是在中国就要考虑
2007-10-12 09:58:42

在我看来,erlang就是服务器的集群。。哪什么P2p,穿透根本不相干
2007-10-12 09:58:56

erlang的权限也是all or none~~
2007-10-12 09:59:28 是的,p2p是自己写的协议.
2007-10-12 10:02:15 恩,集群、分布。C即S,S即C,哈哈
2007-10-12 10:03:14 如果是网络游戏客户端呢
2007-10-12 10:04:11 网络游戏客户端为什么要用erlang来写?
2007-10-12 10:04:58 客户端改咋连还咋连。客户端又不关心server端是什么写的
2007-10-12 10:05:01 各客户端可以用来计算别的东西
2007-10-12 10:05:02 可以想个办法把服务端的一部分运算分给客户端上的节点来运算
2007-10-12 10:05:06 每一种语言都有它自己适用的领域
2007-10-12 10:05:24 客户端用p2p+erlang 来做并行是很彪悍的
2007-10-12 10:07:31 你不会让玩游戏的安装了你的客户端,还要顺便给你再负担这游戏server端的一些计算任务吧?以后还要专门出一个玩游戏的小型机
2007-10-12 10:08:10 你的客户端可以用来计算别的客户端的东西,同样,别人的客户端也在帮你计算痛惜,互惠互利
2007-10-12 10:08:42 有点网格计算的意思
2007-10-12 10:08:57 要发挥想象力
2007-10-12 10:09:10 那这根游戏没多大关系吧。
2007-10-12 10:09:48 ” 网络游戏客户端为什么要用erlang来写?
” 我是为了回答这个问题
2007-10-12 10:09:48 要不然玩游戏的,机器配置好的还要给机器配置差的承担一部分运算。最后大家都买配置差的机器得了。
2007-10-12 10:10:38 如果过为了做分布式运算,比如一些公益性的研究。大家可以提供运算节点,提这些公益研究提供一些计算能力,那另当别论了。
2007-10-12 10:11:08 不是客户端用erlang做,而是说从客户端出来的数据交给erlang处理
2007-10-12 10:11:09 每个网游客户端本来就要承担大量运算,而运营商的服务器承担了更大的计算量, 将计算分布到客户端,势必造成客户端灾难,但是一旦分开算,那就另当别论了,这样从c到s,整体性能都上去了
2007-10-12 10:11:50 可以用erlang是因为它在p2p模型下有优势
2007-10-12 10:13:03 客户端的开发会不会变的很复杂了?以至于不如添加server的机器来的容易些。同时给客户端带来更大的压力,玩家买账也是一个问题。
2007-10-12 10:13:55 erlang做网游的客户端绝对没有必要,并且这也不是erlang擅长的领域
2007-10-12 10:14:15 我的意思是说把游戏客户端当成一个黑匣子,erlang只处理从匣子中出来一部分不需要实时的数据
2007-10-12 10:14:22 干吗要用来做客户端, 用来做路由层那,同学
2007-10-12 10:15:12 erlang做网游的客户端绝对没有必要,并且这也不是erlang擅长的领域 . 介绍下erlang擅长的领域,理由,不擅长的领域,理由.
2007-10-12 10:16:39 用来做路由层,不错的想法
2007-10-12 10:18:14 erlang和lua有多大的区别
2007-10-12 10:18:48 erlang和lua有多大的区别” -_-!
2007-10-12 10:19:17 都是动态语言嘛,haha
2007-10-12 10:19:24 我感觉现在我们的思路有点被传统的编程模式束缚,总感觉erlang可以做什么突破,但是想不出来
2007-10-12 10:21:32 erlang最适合的是做高并发、分布式应用的胶水。计算密集型的代码还得用c分出来去做。
2007-10-12 10:33:24 有个想法,各个客户端的中间数据对erlang分布式的数据库操作,最终结果在存储到传统数据库中
2007-10-12 10:34:16 不知是否可行
2007-10-12 10:56:50

kao~游戏客户端不是erlang做的事~
2007-10-12 10:56:50

谁还会在用户那装个erlang

2007-10-18 00:07:09 http://weblog.hypotheticalabs.com/?p=171
2007-10-18 00:07:19 这篇文章不错
2007-10-18 00:07:43 :D 还没睡呢
2007-10-18 00:07:55 恩 还在看东西
2007-10-18 00:08:30 看了 maillist 鬼佬用mnesia挺深入的
2007-10-18 00:09:12 嗯,鬼佬的好东西不少,需要慢慢挖
2007-10-18 09:59:41 Which crawler in ErLang is best?
2007-10-18 10:14:35 Nobody help me? :)
2007-10-18 10:15:53 貌似现在没有成熟的Erlang crawler
2007-10-18 10:16:29 那个,crawler是什么?
2007-10-18 10:16:45 爬虫
2007-10-18 10:16:52 好像叫蜘蛛?
2007-10-18 10:17:03 明白了 @.@
2007-10-18 10:17:22 crawler,用erlang貌似不太合适吧
2007-10-18 10:17:25 哦,对,爬虫,google抓网页的那种,sorry:)
2007-10-18 10:17:43 erlang貌似不适合吧。
2007-10-18 10:18:00 爬虫对CPU分布的要求并不高
2007-10-18 10:18:23 分析结果还是可以的
2007-10-18 10:18:27 做爬虫是没问题,但是不是最佳选择
2007-10-18 10:19:06 分析结果算是Crawl的附加部分
2007-10-18 10:19:41 我觉得只要是需要分布式的地方都可以用erlang做胶水框架。
2007-10-18 10:19:46 感觉以前用python写的一个,也不错 @.@
2007-10-18 10:20:15 爬也罢,分析也罢。光靠erlang,估计搞不定。
2007-10-18 10:20:26 毕竟,爬虫不需要各个爬虫之间的通讯,所以erlang没有优势,
erlang做调度到是不错.
2007-10-18 10:21:19 搜索估计需要了。需要分布到多台机器上搜,然后合并结果。是吧?
2007-10-18 10:21:20 erlang就不适合做爬虫
2007-10-18 10:21:23 爬虫主要是断点续传,html analyze,对并发要求还真不高
2007-10-18 10:21:42 目前速度最快的是C++写的Larbin,最成熟的是Java写的Heritrix
2007-10-18 11:10:44 @.@
http://www.nerdtests.com/ft_nt2.php
你可以做做这个.
2007-10-18 16:07:47 帅哥们,ppt出炉了,赶紧到 http://groups.google.com/group/erlang-china/browse_thread/thread/9c56a736ed9f166c 下载吧:)
2007-10-18 23:29:35 os_mon里面的东西怎么都没有呢. windows和linux上都没有成功,好像相关模块没编译出来. 想通过它来获取一些系统信息

2007-10-19 11:25:03 hi,我和erlybird的作者dcaoyuan联系上了,他在北京,我准备明天去“采访”dcaoyuan同学,现在征集:
2007-10-19 11:25:14 :D
2007-10-19 11:25:15 1,同去的同学
2007-10-19 11:25:21 2,好问题
2007-10-19 11:25:31 @.@ 恩恩
2007-10-19 11:25:56

明天什么时候啊~?ai~~高中同学结婚~真不是时候~
2007-10-19 11:26:25 beijing?
2007-10-19 11:26:32 要是北京的人多,那就直接升级为cn erlounge iii了哦
2007-10-19 11:26:39 yeah,北京!
2007-10-19 11:26:51 好远
2007-10-19 11:26:53 在珠海的飘过
2007-10-19 11:26:59 这个“采访”有没有DV录像?
2007-10-19 11:27:03 要形成南北少林了
2007-10-19 11:27:35 哈哈,木有DV
2007-10-19 11:27:56 请问一下,有没有人用erlang做过通讯服务器处理性能方面的测试?
2007-10-19 11:28:05 在珠海的可以提问题嘛
2007-10-19 11:28:26 回来整一个dcaoyuan专访。:D
2007-10-19 11:29:02

有人指IM吗?
2007-10-19 11:29:24

to iincity.com 指IM吗?
2007-10-19 11:29:40 IM是人?
2007-10-19 11:29:46 貌似 dcaoyuan 工作是做证券之类性质的吧?问问他觉得Erlang在这些行业能起到啥作用:)
2007-10-19 11:30:06 AvinDev,good question,记下了
2007-10-19 11:30:08

即时通信
2007-10-19 11:30:09 还是特指 做IM服务器?
2007-10-19 11:30:21

IM服务器~
2007-10-19 11:30:53 算是吧,实际上都差不多
2007-10-19 11:31:10 不要介绍那个xmpp服务器
2007-10-19 11:31:30

哦~我就认识那个~哈哈
2007-10-19 11:32:41 hoho,还有其他想问dcaoyuan的问题么?
2007-10-19 11:32:46 那个的性能有定论吗?又做过对比测试的文章吗?还有就是处理的是二进制数据,不是文本
2007-10-19 11:32:57 http://platform.netbeans.org/articles/nbm_interview_caoyuan.html
这里有一篇专访了哦,所以最好和这个有点区别 @.@
2007-10-19 11:33:17 看过那篇,那是nb社区的专访
2007-10-19 11:34:26 erlang初始设计主要是针对交换机应用,不知道交换机里面数据量大不大,交换机里面是不是主要是做控制?
2007-10-19 11:35:01 The best way to find out it, is to try it.
2007-10-19 11:35:13

这里有个关于XMPP性能的,包括erlang写的ejabberd http://www.jabber.org/admin/jsc/
2007-10-19 11:35:45 同意,没有银弹
2007-10-19 11:37:13 关心一下erlang跟现在的数据库mysql之间操作的问题。
2007-10-19 11:41:24 ejabberd自己带了个mysql的driver 是用erlang的网络部件写的哦
2007-10-19 14:01:34 在 http://wiki.51sun.cn/ErlangDoc 看到有热心的朋友 Dino Wu 对《Getting Started With Erlang》和 《OTP Design Principles》的一部分进行了翻译,提供了PDF版本的译文下载,宣传一下
2007-10-19 14:05:11 哦。不错啊。宣传下。
2007-10-19 14:27:05 http://wiki.51sun.cn/ErlangDoc 访问不了?大家可以吗?
2007-10-19 14:27:21 我这里可以访问
2007-10-19 14:27:27 我也可以
2007-10-19 14:28:08 访问不了
2007-10-19 14:30:16 在 erlang-china.org 上整理了直接的 pdf 链接,试试看能不能用
2007-10-19 14:30:26 ok
2007-10-19 14:31:45 不行在本地指定一下IP试试,可能是DNS的问题
[echo@echo ~]$ ping wiki.51sun.cn
PING ip7778.3322.org (60.20.7.206): 56 data bytes
64 bytes from 60.20.7.206: icmp_seq=0 ttl=111 time=80.667 ms

2007-10-19 14:33:19 域名有wiki,后缀带cn,极有可能匹配“和谐表达式”
2007-10-19 14:33:49 O:-)
2007-10-19 14:34:06 另,听说youtube被和了,我这里不能访问,大家能访问么?
2007-10-19 14:34:53 不行,完全和谐了
2007-10-19 14:36:48 我发到erlang-china@googlegroups.com。看看有没。
2007-10-19 14:42:53 目前为止,木有收到
2007-10-19 14:43:32 AvinDev都回复了。你没收到?
2007-10-19 14:43:57 奇怪的是收到了回复,没有收到原信
2007-10-19 14:43:57 到gmail慢些,我是直接到group回复的
2007-10-19 14:44:25 soga!
2007-10-19 14:44:47 真的,原信不见了-_-|||
2007-10-19 14:45:08
2007-10-19 14:46:45 再发一次
2007-10-19 14:47:48 如果原作者不反对的话,我直接附件到erlang-china.org上以便和谐下载?
2007-10-19 14:48:36 原作者不反对。哈哈
2007-10-19 14:49:22 hoho,那就妙手空空咯。
2007-10-19 14:50:16 我这里还有点中文资料,晚上看看有没有没重复的。发上来
2007-10-19 14:51:00 呵呵,好,你直接发到网站上得了。
2007-10-19 14:53:41 done。下不了的,可以到 erlang-china.org 上下镜像版。
2007-10-19 14:53:53 :)
2007-10-19 20:43:30 《面对软件错误构建可靠的分布式系统》这本书不错
2007-10-19 20:44:51 哦。
2007-10-19 20:45:16 推荐给没看过的看看,哪怕不学erlang,也值得一看
2007-10-19 20:46:40 嗯,推荐。
2007-10-19 20:47:02 第二章必看
2007-10-19 20:48:19 我们将软件组织成一个系统要完成的任务的层次结构,每一个任务对应于一组目标,具有给定任务的软件必须尝试去完成和该任务相关的目标。
所有任务按照复杂性排序。最顶层的任务最复杂。如果最顶层任务完的目标都被完成,那么整个系统就运转正常。较低层次的任务应当能够保持系统以一种可接受的方式运转,即使系统所提供的服务有所折扣。
系统中低层任务较高层任务更容易完成其目标。
2007-10-19 20:48:33 以前从来没有这么系统的总结过这些东西
2007-10-19 21:08:12 这本书里面提到了一点:不要“防御式”编程
2007-10-19 21:08:28 我们有时候面试的时候太注重这点了
2007-10-19 21:08:43 都快成潮流了

2007-10-22 16:19:30 我来介绍下,zhang.hao.1009目前在瑞典攻读硕士学位,已经有 1年零2个月的Erlang编程经验,参与过实际的Erlang开发项目。现在是ECUG一员,大家欢迎:)
2007-10-22 16:19:51 这么牛b
2007-10-22 16:20:22 乌普萨大学是牛校
2007-10-22 16:20:30 谢谢AvinDev,大家好!
2007-10-22 16:20:35

hehe
2007-10-22 16:20:36 欢迎
2007-10-22 16:20:40 …….
2007-10-22 16:20:42 欢迎
2007-10-22 16:21:13 没有那么厉害,都是爱好Erlang所以聚在这里的
2007-10-22 16:21:20 那正好介绍一下erlang在做通讯程序的处理效率问题
2007-10-22 16:23:15
2007-10-22 16:23:24 能否介绍一下呢
2007-10-22 16:23:45 tsung 和yaws都说明了 erlang在做通讯程序的处理效率问题 没有问题
2007-10-22 16:24:14 yaws已经相对于apache的水平了俄
2007-10-22 16:24:45 就服务器来讲 apache水平 已经是很优秀了
2007-10-22 16:25:07 恩恩,其实还是介绍下,zhang hao 做的项目是关于什么的吧,
web? 交换机?还是其他什么?
2007-10-22 16:26:00 对,希望zhang能分享下他的经验
2007-10-22 16:26:05 我想表达的意思是erlang 是有很高的并发,但是处理能力是否能真的跟得上,能不能保证比较高的响应速度
2007-10-22 16:26:30 相对于它的高并发
2007-10-22 16:26:47 我说的就是 erlang的协议处理的 效率 其实也是很高的
2007-10-22 16:27:10 相对于io binary出来从来都不是瓶颈
2007-10-22 16:27:23 ok,明白了
2007-10-22 16:27:30 而这种服务大部份是IO密集型的
2007-10-22 16:27:31 没有什么顾虑了
2007-10-22 16:28:23 当然和c的处理比较是慢 但是开发效率 和稳定可以抵消这些
2007-10-22 16:28:52 我也知道他目前无法跟c来比较
2007-10-22 16:29:03 我就是一直写用c来写的
2007-10-22 16:29:33 好,我主要是做了两个项目,实际应用了一下Erlang, 第一个项目是开发手机服务器,去年那时候刚接触Erlang,数据库就用Mnesia写,Mnesia是分布式的数据库,但是缺乏RDBMS的优点,所以就借鉴了某个Ericsson牛人写的模块,来让Mnesia实现RDBMS的功能
2007-10-22 16:29:40 俺也在实现流媒体的服务
2007-10-22 16:30:06
2007-10-22 16:30:15 mnesia 用起来有发现什么问题码?
2007-10-22 16:32:25 就是前面我说的,OTP上发布的Mnesia本身没有关系数据库的一些优点,所以就另外找了个别人写的mnesia_rdbms模块来补充
2007-10-22 16:32:59 其他的问题,就是对SQL的语言支持目前还很不好
2007-10-22 16:33:04 为什么非要用rdbms
2007-10-22 16:33:32 因为想取rdbms的一些基本优点
2007-10-22 16:33:45 比如transaction
2007-10-22 16:34:06 不是很明白 能具体点码?
2007-10-22 16:34:14

我想引用另一个节点上的某一个表,mnesia程序上怎么写啊,找了半天没找出来:(
2007-10-22 16:34:23 mnesia这些功能 不是都有码
2007-10-22 16:34:43 to panxiaof这个是不可以这样作的
2007-10-22 16:35:09 毕竟mnesia运行在单个节点上,还是希望它像通常的关系数据库那样,能够很好维护数据的ACID属性
2007-10-22 16:35:23 除非你 用fragement 自己写hash 来指定数据分布在那个node上的
2007-10-22 16:35:32 再结合Mnesia本身的分布特性
2007-10-22 16:35:57

不能那样吗。。ai~我在Ejabberd的节点上想引用我自个写的一个节点的mnesia表~
2007-10-22 16:36:01 mnesia是可以acid的呀 有什么问题码?
2007-10-22 16:36:09 不能
2007-10-22 16:36:22 mnesia是 master和slave 的关系
2007-10-22 16:36:54 也就是说 实际上只要一个master 其他的slave是参与
2007-10-22 16:37:16 我认为不是Mnesia没有acid,而是需要加强
2007-10-22 16:37:26 slave只能在master的整天范围内 分担一些压力
2007-10-22 16:37:37

一个slave不能订阅两个master~~555555555
2007-10-22 16:38:07 不行呀
2007-10-22 16:38:25 mnesia的acid 不是非常先进是真的
2007-10-22 16:38:35 但是足够一般的应用了 我认为
2007-10-22 16:38:54 我刚好在分析mnesia的运作
2007-10-22 16:40:21 恩,我说的那个mnesia_rdbms模块,是在原来的功能上加强,可以在上面加trigger等等
2007-10-22 16:40:29 不过考虑到mnesia的定位不是复杂的关系数据库
2007-10-22 16:40:33
2007-10-22 16:40:44 本身mnesia也有transaction的
2007-10-22 16:41:14 mnesia提供了table 和 record层面的event notify实现trigger就很容易
2007-10-22 16:41:18 那个rdbms模块也调用了mnesia的transaction
2007-10-22 16:41:38 恩 mnesia的transaction 利用fp语言的特性 实现的很巧妙
2007-10-22 16:44:11 在google上搜mnesia rdbms就可以找到那个模块和其文档
2007-10-22 16:44:53 还有mnesia的scheme也是可以动态修改的 而且改动自动分布到其他节点 这个feature也是比较赞扬的
2007-10-22 16:45:56 感觉我们这个群里的研究氛围很浓,我主要是在应用,挖的不够深。
2007-10-22 16:46:22 呵呵 向你多学点application
2007-10-22 16:46:42 代码贴写给大家瞻仰下
2007-10-22 16:47:16 过奖。代码贴到那里去?
2007-10-22 16:47:44 可以贴在eucg在google.code 上哦
2007-10-22 16:47:47 传到ecug的svn也不错:)
2007-10-22 16:47:50 可以贴到Google Code上。
2007-10-22 16:47:53 研究氛围浓是好事,出了问题可以找老大问么。 :) 心里就踏实多了。哈哈
2007-10-22 16:48:23 http://code.google.com/p/ecug/source
2007-10-22 16:48:30 哈哈,对阿,有老大感觉很好
2007-10-22 16:48:50 谢谢,我回头就去做这个事情
2007-10-22 16:57:21 zoom.Quiet 是陕西人?

2007-10-23 16:04:38 http://mryufeng.javaeye.com/blog/134807 erlang driver和热部署(重要)
2007-10-23 16:05:14 @.@ 瞻仰.
2007-10-23 16:05:48 终于考虑通了这个问题 很是得意
2007-10-23 16:06:07 又一个(重要),这个标题党怪蜀黍
2007-10-23 16:06:15 囧rz.
2007-10-23 16:06:33 不好意思 为了大家好 怕人家不看 损失了
2007-10-23 16:06:36 原来已经有这个了.我原来还在想,自己开一个进程去注册名字,新的替换掉旧的…
2007-10-23 16:06:44 俺都郁闷好几个月了

2007-10-24 11:05:50 速错?立即报错?
2007-10-24 11:06:43 快速死亡,不拖沓, 要么正常运行,要么很彻底地死掉,不在有错误的情况下活着。
2007-10-24 11:06:55 嗯,
2007-10-24 11:07:09 有点:宁可站着死,不可跪着生 的味道
2007-10-24 11:07:32 就是写代码的时候完全不考虑异常情况。只按照正常情况写。不写防御式的代码?
2007-10-24 11:07:48 挂了就发出一个消息,说我挂了。
2007-10-24 11:07:53 不是这个意思,比如客户端传过来的错误参数还是要处理的。。。
2007-10-24 11:08:06 防御式代码是用于防御别人对的进程对自己的影响
2007-10-24 11:08:14 然后监督进程重启之,记录出错log就成了?
2007-10-24 11:08:19 是说,如果你知道怎么处理,那就处理,不知道怎么处理,不要做模糊处理…
2007-10-24 11:08:27 我是说这个翻译这个词,太别扭
2007-10-24 11:08:42 因为这个词的确是不好翻译
2007-10-24 11:09:13 我看了,还有身什么乖函数,真的是别扭
2007-10-24 11:09:16 猝死 !
2007-10-24 11:09:31 但是我看joe的博士论文其中的一个代码,貌似对其他不匹配的情况均不处理。
2007-10-24 11:09:38 这也是两样的含义
2007-10-24 11:09:50 同樣…………
2007-10-24 11:10:04 对其他不匹配的情况均不处理。看仔细了,这个系统会处理
2007-10-24 11:10:36 就是对错误的参数不理睬,监督进程接受到工作进程出错消息后记录之,重启之就ok了。是这样么?
2007-10-24 11:10:54 能不能取个好的名字
2007-10-24 11:10:54 异常还是要处理的,只不过不像现在的处理方式了。
2007-10-24 11:10:59 话还没打完呢。
2007-10-24 11:11:16 不匹配不处理,也有一种可能是根本不会发生,要是发生了,就是系统哪里出错了,你不知道哪里出错,又怎么能写出处理,代码,不如不处理,直接死掉
2007-10-24 11:11:21 如果不能取,那就不好翻译,只对他进行解析就行了
2007-10-24 11:11:26 不用抢救,当场死亡。至于有没有别的人伤心过度而死,那就看别的人(进程)的抵抗力(防御代码)了,然后活着的人再造一个新生儿出来。
2007-10-24 11:11:54 安乐死?? 对有错误的进程
2007-10-24 11:12:19 立即死亡?
2007-10-24 11:12:22

这个翻译不错、、
2007-10-24 11:12:29

安乐死,
2007-10-24 11:12:29 hello(a) ->

……..;
hello(b) ->
…..;
hello(_) ->
.
2007-10-24 11:12:29 反正不防御,认为死亡是正當的
2007-10-24 11:12:38 你说这样写的话,最后一个算不算是防御式编程?
2007-10-24 11:12:41 有必要写么?
2007-10-24 11:13:20 至于那个当场死亡的家伙是死于天灾(或许它内部还尝试了抵抗天灾[异常处理])还是人祸,那就不是整个人类社会关心的了
2007-10-24 11:13:48

是不是告诉我们,最好不要写 case XXX of _Any->这样的代码~
2007-10-24 11:14:34 如果你_Any要处理的话还是要写的吧。比如提示一下,你输入的参数不正确之类的。嘿嘿
2007-10-24 11:14:43 要看具体实现…比如
is_ready() -> ok|wait
这样一个函数,调用他的人,就不要写
case is_ready() of
ok->
….
wait->

_->

2007-10-24 11:14:54 他是强调,与错误处理分离吧
2007-10-24 11:14:58 是当面临无法确定的错误时(例如整个系统级别的错误),就不要挣扎了,挣扎只能带来更多的痛苦
2007-10-24 11:15:00 这块看完之后,有些不理解。。 :(
2007-10-24 11:15:13 一般我在解码的时候,如果有错误就会有不匹配,这时候会马上返回一个标识错误的atom
2007-10-24 11:15:20 如果错误都不处理,怎么来的健壮,容错?
2007-10-24 11:15:58 死了重来
2007-10-24 11:16:13 这个处理方式是跟erlang的process概念连在一块的。错误处理,异常处理都是要的,不能抛弃啊
2007-10-24 11:16:24 治疗绝症的代价是很高的,不如重新生一个实在
2007-10-24 11:17:24 讨论这个话题,我觉得有一点要首先搞分明,哪些是错误,哪些是正常的逻辑过程
2007-10-24 11:17:33 re
2007-10-24 11:17:39 up 老朱
2007-10-24 11:18:50 正常的逻辑处理流程不是错误,这个是要处理的
2007-10-24 11:20:11

我是觉得你这个程序要处理case 的情况你都知道,就不要给他加个any了~ 不然很可能带着错误运行~
2007-10-24 11:20:36 重启进程也是处理出错的一种方法。只要速度够快,有何不可?在处理出错牺牲的效率,和重启的效率之间做了个选择。
2007-10-24 11:21:06 我觉得,如果这个逻辑你要处理返回回去一个状态。而不是为了容错,那就写。如果为了容错,让该进程不死。那就是防御式编程了。
2007-10-24 11:21:32 让他拥有不死之身的最好办法是,死了再来。
2007-10-24 11:22:11

然后出具一份死亡log
2007-10-24 11:22:51 将正确执行的代码与错误处理分开,是为了更清晰得表达意图
2007-10-24 11:23:48 进程因为任何原因死了后,还可以再来,并且不影响其他模块的运行,这是“速错”的本义吧?
2007-10-24 11:24:03 让有点erlang应用实际编写经验的人,给点经验之谈?
2007-10-24 11:24:18 恩。
2007-10-24 11:24:46 速错就是既然有病了,就麻麻利利的死来再来。
2007-10-24 11:24:48 :)
2007-10-24 11:24:49 爱立信的人或者是电信的人?
2007-10-24 11:24:52 这个跟实际编写经验关系不大吧
2007-10-24 11:25:02 yufeng老大现身说法
2007-10-24 11:25:26 实际工作用到的话,这块理解的能够更深入些。
2007-10-24 11:25:31 我是这么认为的 :)
2007-10-24 11:26:33 锋爷应该还没起床,凌晨一点还见他在社区里发帖,兴致高涨的样子
2007-10-24 11:26:47 @.@
2007-10-24 11:28:45 一个例子,对于io:read
2007-10-24 11:29:00 read([IoDevice,] Prompt) -> Result
2007-10-24 11:29:19 {ok, Term}
The parsing was successful.

eof
End of file was encountered.

{error, ErrorInfo}
The parsing failed.
2007-10-24 11:30:50 很明显,对于这io:read
2007-10-24 11:31:16 ok和eof是正常的逻辑,是要正常处理的
2007-10-24 11:31:59 而你的读这个文件的那个进程在遇到error时,直接死掉比较妥当
2007-10-24 11:32:26 {error, ErrorInfo}就不用处理了
2007-10-24 11:33:48 如果处理这些error了,那就是防御式编程,这不是erlang所鼓励的
2007-10-24 11:35:29 不同意楼上的。erlang不是要鼓励不处理错误和异常。
2007-10-24 11:37:24 erlang比较鼓励的做法是把任务细化,放到一个个进程内,比方上面说到的读某个文件的内容时
2007-10-24 11:37:42 速错的目的是能够捕获那些“破坏系统内部的坚固性”的异常,使错误不能传播开来破坏系统。
2007-10-24 11:37:50 如果在同一个进程内,这个error是很难处理的
2007-10-24 11:37:52 我也感觉,找不到一个明确的判定是否是防御式编程的条件。
2007-10-24 11:38:09 所以干脆就让这个进程死掉
2007-10-24 11:38:59 那shiqiang.tang兄能告诉我们在这个进程内如何处理这个error吗? :D
2007-10-24 11:39:26 当内容读了一半时
2007-10-24 11:40:18 首先在这个进程内能不能抓住这个异常。能抓住肯定就能处理的。
2007-10-24 11:40:50 能,{error, ErrorInfo}是io:read可能的返回值之一
2007-10-24 11:41:28 那就不需要速错这样来防范了
2007-10-24 11:42:48 要对类似问题防御,就要知道:1、问题域,比如出错的原因列表的全集 2、对每个原因的处理方案
2007-10-24 11:43:15 这是很awkward的
2007-10-24 11:45:17 一个模块或者一个流程的运行总有一个结果的。针对这个结果进行编码就是防御吧。、
2007-10-24 11:46:37 窃以为,针对正常的逻辑来处理不是防御,对错误才是
2007-10-24 11:47:02 @.@ 应该说,针对这个结果编码就是不防御,处理不是api标准输出的才是防御.
2007-10-24 11:48:38 erlang不强调防御性编程吧
2007-10-24 11:50:06 应该说,针对这个结果编码就是不防御,处理不是api标准输出的才是防御.

2007-10-24 11:50:18 关键是什么才是api的标准输出呢?
2007-10-24 11:51:37 这是我个人的看法。
2007-10-24 11:51:39 如果一个erlang的进程抛出了异常没有处理的话,系统应该就挂了吧?
2007-10-24 11:51:41 NetSnail的意思可能是api指明的输出 :D
2007-10-24 11:52:36 没人关心他,爱死不死的 :)
2007-10-24 11:52:52 各位,讨论技术问题不必要这样吧? ” ???
2007-10-24 11:53:20 恩恩,比如 is_ready() -> ok|wait 这样的函数,就只能处理ok和wait两种状态.
2007-10-24 11:53:53 哪一个函数对外提供什么状态,还不是写的人定的。
2007-10-24 11:53:54 当然,如果你不知道当返回wait的时候应该做什么,也应该死掉.
2007-10-24 11:54:45 问题是,当你调用的那个程序有内部错误的时候,他可以不按照指定的值来返回.
2007-10-24 11:55:00 怎么就判断出来一个函数处理几个状态呢?你说两个够了,多一个就防御了。我说不够。这就成了主观题了。
2007-10-24 11:56:24 不够,为什么会不够,如果你能预计到其他的返回情况,自然会知道还要处理什么,如果你不能预计到,用一个_Any来包括,就是防御的.
2007-10-24 11:56:38 一个函数的返回状态是写的人定的吧?按照契约编程
2007-10-24 11:58:00 契约,是不是指一个函数的参数,和返回?
2007-10-24 11:58:11 是的。
2007-10-24 11:58:52 那既然这个函数是我写的,那参数个数,类型。和返回状态都是我定的。那么就又回到那个主观题问题了。
2007-10-24 11:59:06 其实,在C里面也有这样的争论的,比如str2int(char s*);这样一个函数,是写
assert(s!=NULL);
还是
if(s==NULL)return 0;
就是不防御与防御的区别.
2007-10-24 12:00:56 有契约保证就不防御,没有就防御。
2007-10-24 12:01:35 吃饭时间,中场休息.

2007-10-29 08:55:07 hi
2007-10-29 08:57:10 我想咨询一下做过实际项目的兄弟,你们是如何来管理进程消息的,如果管理大量进程的
2007-10-29 09:09:54 据说 R12B 加入了array数据结构?
2007-10-29 09:20:56 我想咨询一下做过实际项目的兄弟,当有大量进程的时候,你们是如何来管理进程消息的,如何管理大量进程的
2007-10-29 09:21:34

OTP :simple_one_for_one
2007-10-29 09:21:44 大量如何定义?
2007-10-29 09:22:56

init(Module) ->
{ok, {{simple_one_for_one, 10, 1},
[{undefined, {Module, start_link, []},
temporary, brutal_kill, worker, [Module]}]}}.
2007-10-29 09:23:28 what’s that?
2007-10-29 09:23:30 就是说一个项目里面定义了很多的进程(不是只实际运行的,运行的肯定会更多),由于进程间采用消息来沟通,这里就会存在大量的消息定义,这些你们如何来管理
2007-10-29 09:23:55 如何来规范这些消息,
2007-10-29 09:24:40

eheh..不知道~
2007-10-29 09:24:48 如果消息不是很大的话 几十个byte的话 就采用tuple方式 要不就用binary格式
2007-10-29 09:25:04 消息定义就是标准的{tag, Msg}哦
2007-10-29 09:25:28 这么多的进程,在一个程序里面如何有效的管理?当一个进程要给另外一个进程发消息的时候,如果来知道这些进程
2007-10-29 09:25:31 关于规范化,我知道的有两种方式,1,wrapmethod,2,record in .hrl file
2007-10-29 09:26:18 mryufeng,你可能还没有明白我要表达的意思,
2007-10-29 09:27:37 如何知道这个进程? erlang的做法是key->pid 用ets保存
2007-10-29 09:27:46

要不你举一个例子~
2007-10-29 09:28:10 你说的消息定义标准,这个只是一个具体的技术问题,我是从工程角度来说的,如果是很多人参与的项目,你怎么来规范?怎么管理,
2007-10-29 09:28:51 这个是软件工程的事情
2007-10-29 09:28:54

每人发个卡片~hehe
2007-10-29 09:28:58 和erlang什么关系
2007-10-29 09:29:12 erlang中常见的interface定义方式是:把api和implement写在同一个模块中。因为implement常常是用gen_xxx实现的,所以,在export中会看见n多的方法被export出来,但,只有一部分是api的方法,另一部分是gen_xxx需要的方法。这个时候,新引入的-spec似乎有帮助(还没有细看)。
2007-10-29 09:29:43 如果我没有理解错的话,iincity说的是接口的清晰化问题
2007-10-29 09:30:15 这的确是个让人需要适应的问题,尤其是用惯了java的interface之类的东西
2007-10-29 09:31:17

只有一部分是api的方法,另一部分是gen_xxx需要的方法..这个不在明白,好像都不需要什么API吧,
2007-10-29 09:31:32 其实很简单 在erlang lib里面搞lib好好研究下
2007-10-29 09:31:49 我这里说的api是指对外开放的自定义function
2007-10-29 09:32:44 只要小小的project 如ftp 人家如何作 我们也如何作 相信就是最佳实践了e
2007-10-29 09:33:19 gen_xxx 只能通过类似于 gen_xxx:call 之类的方式来调用,这实际上仍然没有做到“规范化接口”。常常会把这个调用方式用一个wrap function包起来。
2007-10-29 09:33:29 如果很多人合作来写这个程序,你们之间采用消息来沟通,这些消息肯定要有一定的规范吧,还有就是如何有效的让别人知道你的意图。另外别人怎么来维护这些代码
2007-10-29 09:34:15 这个和以前c作程序不是一样的码
2007-10-29 09:34:25 首先你定义协议格式 然后实现
2007-10-29 09:34:49 iincity,消息隐藏在这些api的wrapfuncition之中
2007-10-29 09:34:58 只不过现在的协议格式简单了就是{tag1, Msg1} {tag2, Msg2} 之类的俄
2007-10-29 09:35:29 文档写清楚tag1干什么的msg1什么格式不就完了码?
2007-10-29 09:37:30 mryufeng,我理解iincity的问题是配合问题,team中,并不是所有的用户都是在“协议”级别工作的,比如,前端的程序员可能只知道register(username, password),而不需要知道{register, Username, Password}这样的协议。这是一个封装/API定义的问题。
2007-10-29 09:38:10 这个是API的定义问题 当然和erlang一样搞个文档 说明每个api的使用
2007-10-29 09:38:48 似乎这是个工程问题,而不是一个技术问题
2007-10-29 09:38:49 这个是任何语言实现的系统 都必须作的事情 和erlang本身应该没有关系把
2007-10-29 09:39:05 嗯,我也认为和erlang的关系不大
2007-10-29 09:39:27 又不是说erlang没有办法定义 这些文档 或者 定义的方式非常格入
2007-10-29 09:39:47 没错,工程问题,可能他还没有把这个东西和Erlang里面的做法对应起来
2007-10-29 09:40:26 这个还是得在实践中体会
2007-10-29 09:41:09 我觉得,wrapfuncition是最好的办法,对外不暴露消息,
有些共用的tuple用record保存在.hrl里,写好比较详尽的注释就好了…
至少我们现在是这么做的.
2007-10-29 09:41:23 觉得跟这个问题讨论的层面类似 [erlang-questions] Design methodology going from Object oriented to functional programming?
2007-10-29 09:41:58
2007-10-29 09:42:01 呵呵 c++不是也是这样作的
2007-10-29 09:42:12 实现和接口分离 手法都是一样的哦
2007-10-29 09:42:32 语言本身又支持 这个经验就可以跨语言移植
2007-10-29 09:42:45 是呀,因为软件工程其实最后管理的是人,不是软件么,所以对人适用的东西都是差不多的.
2007-10-29 09:42:54
2007-10-29 10:23:29

一个节点要用另一个节点的表,必需用extra_db_node “['b@xxx']” 这样的启动吗? 除了这个方法还有别的方法吗?
2007-10-29 10:26:01

我在一个A节点上用add_table_copy(tabl1,’a@XXX’,ram_copies)不行啊,
2007-10-29 10:26:11

总是说表不存在~
2007-10-29 10:27:37

哦~是不是我那个 add_table_copy里写的是源节点,而不是目的节点
2007-10-29 10:27:42

我再试试
2007-10-29 10:37:20

add_table_copy里写的是目的节点,但mnesia又怎么会知道那个table的源节点在哪个机子上呢,是不是整个系统的table的‘名”都是全局的与唯一的?
2007-10-29 10:37:37 是的
2007-10-29 10:38:46

如果两个系统,有同名的一个表,他们用net_adm ping通以后,是不是就报错了?
2007-10-29 14:54:53

求助求助:在A节点上执行mnesia:create_schema(['a@feng','b@feng'])与在A和B节点上分别执行mnesia:create_schema(['a@feng']) mnesia:create_schema(['b@feng']) 有什么区别啊?
2007-10-29 14:56:01 当然有区别了
2007-10-29 14:56:16 mnesia是有mater和slave的概念的
2007-10-29 14:56:22

我用前面一个方法,A与B节点上的表是相互可见的,但后者就不可见了
2007-10-29 14:56:41 schema是从master到slave传播的哦
2007-10-29 14:56:55

可是一开始你不可能知道有多少slave…
2007-10-29 14:57:20 但是slave 要指定master 这样就知道 了呀
2007-10-29 14:57:48

哦~这个哪个方法啊~我找不到:(
2007-10-29 14:58:06 你slave节点启动的时候是不是没有指定master 那他就自立山头了呀
2007-10-29 14:58:16 有的 你找下
2007-10-29 14:58:42

我知道一个extra_db_node 这个命令行的参数
2007-10-29 14:59:29

别的没碰到过:(。。好的。。我再找找
2007-10-29 15:19:44 *** mryufeng is being a moron trying to flood the channel
2007-10-29 15:19:56 erl -sname b
mnesia:start().
mnesia:change_config(extra_db_nodes, [a@light]).

%% At this point, the schema will be copied over to b@light

mnesia:change_table_copy_type(schema, node(), disc_copies).

mnesia:add_table_copy(my_table, node(), disc_copies).

Chandru
2007-10-29 15:19:57 囧rz.
2007-10-29 15:20:09 这个估计能帮到你
2007-10-29 15:20:41 [erlang-questions] Adding new nodes to a Msenia group?
2007-10-29 15:23:34

应该说mnesia的master salve跟别的数据库的mast salve不太一样吧,mnesia的好像是对等的吧,大家都可以写~
2007-10-29 15:23:51 不是对等 的
2007-10-29 15:24:03 是master slave的格式的
2007-10-29 15:24:20 但是他的参数设置有点古怪
2007-10-29 15:24:28

那master节点坏了,是不是就出问题了?
2007-10-29 15:25:01 是的
2007-10-29 15:25:14 但是你忘记了 mnesia是个application
2007-10-29 15:25:54

是application有什么不同吗,我想知道一下
2007-10-29 15:26:27

我好像曾经把master节点给关了,但别的节点的mnesia可以正常工作~
2007-10-29 15:26:46

表是照读的
2007-10-29 15:33:06 所以 global + dist_ac + mnesia master slave模式 就搞定这个问题了
2007-10-29 15:34:16 erl -sname b
mnesia:start().
mnesia:change_config(extra_db_nodes, [a@light]).
这步骤通知 master我的存在
2007-10-29 15:34:47 然后master就把已经存在的scheme和数据全部 同步过来
2007-10-29 15:35:36 mnesia 内部的所有事情都是master总裁和指挥的
2007-10-29 15:38:04

extra_db_nodes en..我现在就是用这个。。不过我在命令行里执行。。好像他不会本地产生文件~
2007-10-29 15:38:46

产生一堆跟scheme相关的文件~(好像是这样的)感觉怪怪的
2007-10-29 15:38:57

不会产生一堆跟scheme相关的文件~(好像是这样的)感觉怪怪的

2007-10-29 15:38:57 你看下 这个部署应该看到数据同步 你用网络查看那工具看下
2007-10-29 15:39:25 mysql数据库也是这样保存文件的







Write a Comment

Note: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>