原创文章,转载请注明: 转载自系统技术非业余研究
本文链接地址: 留言板
各位兄弟姐妹们,欢迎各种意见和建议,一起学习提高!
Post Footer automatically generated by wp-posturl plugin for wordpress.
hi,想请教一下mnesia的查询,又没办法做到模糊查询的?例如 name=“abcdefghij”,如果用sql查的话可以是:like “%cdef%”这样可以查到,但mnesia怎么可以做到?我看文档,找网络,都找不到。谢谢了!
[Reply]
mnesia是个数据源,只支持基本的查询操作, 复杂的查询条件是由 qlc模块来支持的。你说的功能可以用match_specification来做。
:)谢谢你的回答,能否给我match_specification的链接?我没找得到。
:)找到了,我先看看,不明白再请教。
问一下老大,erlang开发大型网络游戏的前景如何? ND有这个应用的打算吗?
yu feng Reply:November 26th, 2009 at 3:51 pm
我觉得很适合做大型的网游 部分历史代码由port或者cnode已经nif承担,整个开发很轻松的。 ND 老板很看好。。。
小弟不才,一直想在互联网这条路上混出点成绩来,以前都只是给别人做做小企业网站,也运营过地方论坛,但都没有什么成效,随着As3和Flex的发展,小弟对日后的发展也做了一定调整,想在休闲网页游戏方面试一试,主要是面向地方结合先下运营(小弟是广东佛山的),所以之前自学了as3了Flex,As3相对比较熟悉一点,Flex则大概了解了一遍.现在开始弄服务器端的编程,可是没有什么这方面的基础和实际经验,C/C++相信学习成本和难度高了些,用java也尝试过了解过,后来知道了Erlang,觉得用Erlang做的话应该很适合的,因为在我的架构里,主要是编写基于TCP协议方面的通信,但苦于没有更好的实战资料,自己的英文又基本是靠翻译才勉强看得明白的程序,苦恼啊!苦恼啊!
本人目前要解决的问题如下: 1.as3(多客户端)与于Erlang的通信问题. 2.游戏大厅的服务器架构 3.具体游戏的服务器架构(小弟主要想做的是网络棋牌对战类的网页Flash版的游戏).
可能还有一些实际问题我没有遇到和想到,现在的我就在这卡主了,不知道该如何进行下去.
小弟真诚求学,现在已经辞掉了工作,专心于这方面的学习了.
当然,不能让余丰大哥太过雷锋的,小弟愿意有偿请教!当然,小弟积蓄也是有限啊!还望大哥能体谅.
小弟计划花半年的时间掌握这方面的知识,花半年时间来开发产品,再投入运营!
希望余丰大哥百忙中能为小弟指点一二.
再次祝愿余丰大哥在新的一年里余丰余丰,御风而上,玉树临风.
我在调分布式编程的KVS程序时出了问题: >rpc(call(gandalf@20090909-1351,kvs,store,[weather,fine]). 出了错: **exception error:bad argument in an arithmetic expression in operator -/2 called gandalf@20090909-1351 请教问题出在哪儿?
Yu Feng Reply:March 30th, 2010 at 1:46 pm
gandalf@20090909-1351 这个不是atom
正确的写法是 ‘gandalf@20090909-1351’
谢谢,已经正确了
大牛,俺是一名java程序员,工作两年多,一直关注着erlang,业余时间学习erlang半年有余,现在感觉没多大长进了,能否提供一些方法和建议。
Yu Feng Reply:April 5th, 2010 at 4:48 pm
猛看代码 猛写代码. 推荐看看如mochiweb hotwheels这样的短小又写的好的模块. 光知道语法啥用没有!
Hi,本人在使用mnesia的过程中,发现log里常有: ** WARNING ** Mnesia is overloaded: {mnesia_tm, message_queue_len, “mm”} 这样的警报信息。而我对mnesia的使用是很轻量级的,只有4个表,最大不超过2000条数据,没有理由超载。上网google了一下,网上对此问题众说纷纭,莫衷一是。
请教下此信息因何产生?能通过什么思路调优?在此拜谢。
@Atlas 846 Threshold = 100, 847 Prev = S#state.tm_queue_len, 848 {message_queue_len, Len} = 849 process_info(Pid, message_queue_len), 850 if 851 Len > Threshold, Prev > Threshold -> 852 What = {mnesia_tm, message_queue_len, [Prev, Len]}, 853 mnesia_lib:report_system_event({mnesia_overload, What}), 854 {noreply, S#state{tm_queue_len = 0}};
check_overload是10秒钟一次, 你打印警告信息的原因是在过去的20秒里面,你的mneisa_tm的消息队列的长度都超过了100. 也就是说你的事务交易积累太多. 原因可能有2个: 1. 你的提交的事务资源竞争, 事务未能很快完成. 2. 你的机器处理能力有限, 不能很快处理事务.
@Yu Feng
感谢。 那mnesia_tm的作用是什么呢?为什么Len不能超过100?这个100的数量能不能增加的?
因为我的系统业务模型比较复杂,所以我采用了原子型事务的方式,既每个业务都拆分成若干原子事务,每个原子事务都是独立的事务,可以作为不同业务的组成部分,也可以独立使用。所以事务交易积累是比较多。
但如果我要改变这种原子型事务的结构,改成每个业务都是一个超级大事务,那么对整个体系改动太大。目前我的系统用户量和负载都很小,我观察过server,平均cpu负载都在5%以下,内存都在10%以下,我认为应该有充足的系统资源来满足mnesia的要求。我能不能通过改变某些配置来提高这个Threshold的值?
你好!在学习Erlang的OTP编程,在第18章P276,1>alarm_handler:set_alarm(tooHot).有问题,** exception error: bad argument in function gen_event:send/2 请教不知问题出在哪儿?
Yu Feng Reply:April 24th, 2010 at 4:25 pm
看起来好像是 gen_event要发送的进程不存在.
谢谢余先生,我的环境是WINDOWS,所以先要运行erl -boot start_sasl,问题就解决了。但现在的问题是WINDOWS下运行eerl -boot start_sasl后emacs平台就没有了。我想请教:既保持emacs环境又能带参数的运行erl?
@zfz -boot start_sasl 和 -boot start_clean(默认的) 的区别是多启动了sasl应用.
所以你可以在运行你的程序前运行 application:start(sasl). 效果是一样的.
@Atlas 这个我个人感觉是你没用对mnesia, 你的瓶颈在锁和事务交互上了.
client_connect(Id, Pw) -> case gen_tcp:connect(“localhost”,6720,[binary,{packet,4}]) of {ok, Socket} -> %先发送认证消息 case login_info(Socket,Id,Pw) of {ok} -> io:format(“pass login_info~n”), send_msg(Socket); {einval} -> {false_in_login} end; {error,Why} -> {Why} end.
%向服务器发登陆认证 login_info(Socket,Id,Pw) -> Msg = {login,Id,Pw}, case gen_tcp:send(Socket, term_to_binary(Msg)) of ok -> % io:format(“login_info ok:~p~n”,[Self]), io:format(“send ok:~n”), case gen_tcp:recv(Socket,0) of {ok,B} -> io:format(“recv ok:~n”), {ok}; %在这里套接字出错Why变为einval {error,Why} -> {Why} end; {error,closed} -> closed end.
%%%%%%%%%%%%%%%%%%%%% %服务器在这里最后响应,同时也是问题出现的地方 loop(Socket) -> io:format(“loop~n”), case gen_tcp:recv(Socket, 0) of {ok, Data} -> %处理信息,发送信息到client_manager让其处理向客户端发送消息事件 %处理两种请求,一种登陆认证,另一种是消息传输 io:format(“loop ok~n”), case binary_to_term(Data) of {login,Id,Pw} -> %认证登陆 io:format(“in loop~n”), %在这里出现了问题 gen_tcp:send(Socket,term_to_binary({ok})), io:format(“after send~n”), {login_check_now}; Data_send -> io:format(“in loop no:~n”), client_manager ! {data,Data_send}, loop(Socket) end; {error, closed} -> %不清错失败原因和出处时的处理方式,(待处理) client_manager ! {disconnect, Socket}, {error, closed} end.
现在问题在于gen_tcp:send(Socket,term_to_binary({ok}))上调用的话在login_info那里受到的einval的套接字出错的问题 现在不知道问题出现在哪里?不知道能怎么样修改,谢谢余丰大哥了
Yu Feng Reply:April 30th, 2010 at 11:24 am
{login_check_now}; 后loop 中止, 因为看不到你的其他代码, 但是基本上是由于loop中止, 进程退出。 进程退出的时候, 会关闭所拥有的port. gen_tcp是个port.所以你的socket就会被服务端关闭。
谢谢余先生,现在还是有一些问题,一、application的相关技术文档哪儿有?二、错误日志配置文件又如何加载上去?如:erl -boot start_sasl -config elog3中的sasl应用已经可用application启动了,但elog3错误日志配置如何启动?
@zfz 这些文档otp的随机带的文档里面写的非常清楚的,你可以先好好读下!
请教:在WINDOWS环境下错误日志配置文件elog3.config如何加载启用?
@zfz 不明白你的问题是什么? 但是我建议不要在windows下开发。你可以用virtualbox安装个ubuntu来使用,windows不大适合otp开发。
感谢!我的问题是:《Erlang程序设计》一书中第十八章很多地方用到SASL的配置,主要是错误日志的配置,如书中P273,日志在shell和循环日志中同时输出的配置文件elog3.config,但如何在WINDOWS环境下加载启用?我现在不是用于开发而是用于教学。你讲的方法我会试试。
@zfz Erlang是完全平台移植的,这意味所有的命令行参数和使用习惯都是一样的,除了平台相关的东西,比如说文件路径。 你的疑惑是估计是这样的: unix平台下用的文件路径如/var/log/xxx.log 在windows下应该改成如c:\\var\\\log\\xx.log
一定叨唠了。但还得叨唠。
在WINDOWS下,“运行”命令行:
erl -boot start_sasl -config elog3
出错:{“could not start kernel pid”,application_controller,”error in config file\”./elog3.config\”(none):configuration file not found”}
可是在 e:\erl5.7.3\bin 下有 elog3.config 文件。因为错误信息一闪而过,今天才看清。
请教问题出在哪儿?
@zfz ./elog3.config 不是写的很明白吗, 是在当前目录下读呀。。。
感谢!“当前目录读取”:只把erl启动前加上e:\erl5.7.3\bin便可。既WINDOWS下“运行”命令行为:
e:\erl5.7.3\bin erl -boot start_sasl -config elog3
在此命令行中,参数-boot start_sasl 可在>下运行:
>application:start(sasl).
来取代。现在的问题是:命令行参数
-config elog3
可用什么来代替?
因为命令行开启的Erlang平台没了emacs编辑开发平台。
@zfz 抱歉,确实不明白你的emacs和erlang有什么关系。 干吗说, emacs平台没了?
启动Erlang我认为有两种方式。 一是在WINDOWS平台上:开始->运行->打开,键入
就进入了Erlang环境。此时-boot start_sasl和-config elog3都起到了作用。仅有ESell,编辑Erlang程序很不方便。
二是启动emacs后:file->open file,选择一个.erl文件,在emacs上就有一个Erlang菜单项。此时可编辑Erlang程序、编译Erlang程序,也有Erlang的Sell。第一种方式命令行中的参数-boot start_sasl 可在>下运行:
来取代。我的问题是:现在希望第一种方式命令行参数
也起作用,那么可用什么来代替呢?
也就是:第一种方式开启Erlang平台,命令行参数-boot start_sasl和-config elog3都能起到作用,可是没有了emacs环境,编辑程序很不方便。第二种方式开启Erlang平台,编辑、编译、Shell集成了,很方便,命令行参数-boot start_sasl可用>application:start(sasl).来实现,可命令行参数-config elog3又能用什么来实现?
Mr Yu Feng 你好~我最近在研究聊天室方面的,我看到有个聊天室做到了一个房间同时有1W多人的, ejabberd貌似说支持单台服务器3000-5000,但是它好像不支持聊天室或者群组这种形式。。 我想问问用erlang做聊天室可不可以做到单个房间1W人啊?先谢谢了。。。 现在是不是有比书店那些书上写的其他高效的方法啊?
Yu Feng Reply:May 31st, 2010 at 1:10 pm
你从哪里看来的数字ejabberd才这么点? 这个数字如果是活跃的还差不多, 如果算在线的话, × 10差不多。 erlang的IO是能强大的。 你说的书上,不是你看了programing erlang就开始打算做这个系统吧?
想照着VC 6.0书上的例子做得~呵呵 它上面是先把消息发到服务器,然后服务器转发到list里面 Yu Feng老大还有其他高效点的方法吗?
Yu Feng Reply:May 31st, 2010 at 11:38 pm
看点书就做这种项目个人感觉很不靠谱!
Yu Feng老大,那ejabberd对群组的支持好不好啊? 我在GOOFLE上搜索了下貌似只有一个客户端的软件支持~??
余老师,您好! 我最近在研究tsung。遇到了一个问题,请教下您。 firefox设置了localhost:8090代理,开启tsung recorder后,在录制的session里没有内容。
@武彻 这个问题已经解决了。是1.2.2的版本有问题。我用1.3.1就不存在此问题
@zfz 我也遇到同样的问题,貌似参数不对?
man上是这样写的
set_alarm(alarm())
Types alarm() = {AlarmId, AlarmDescription} AlarmId = term() AlarmDescription = term()
Sets an alarm with id AlarmId . This id is used at a later stage when the alarm is cleared.
yu feng :我觉得很适合做大型的网游 部分历史代码由port或者cnode已经nif承担,整个开发很轻松的。ND 老板很看好。。。
弱弱地问一句ND是什么公司啊?
Yu Feng Reply:September 10th, 2010 at 10:35 am
ND=网龙 上市的游戏公司。
博主,有一问题请教。 我要用mnesia存放一些,持久化的用户数据。可是,用户比较多,大概1M。然后,每个用户又会有很多物品,每个用户的每一物品有一个记录。这样我打算用这样的schema来存储我上面提到的业务,-record(user, {user_id, user_info, …}). -record(items, {item_id, user_id, item_info}). 可是众所周知,mnesia有4G的限制。所以,我打算用table name mapping的方法来存放,具体是用list_to_atom(lists:concat([‘user_’, erlang:phash(user_id, 100)])),来作为table的名字。然后我的问题是: 1 –
博主,有一问题请教。 我要用mnesia存放一些,持久化的用户数据。可是,用户比较多,大概1M。然后,每个用户又会有很多物品,每个用户的每一物品有一个记录。这样我打算用这样的schema来存储我上面提到的业务,-record(user, {user_id, user_info, …}). -record(items, {item_id, user_id, item_info}). 可是众所周知,mnesia有4G的限制。所以,我打算用table name mapping的方法来存放,具体是用list_to_atom(lists:concat([‘user_’, erlang:phash(user_id, 100)])),来作为table的名字。然后我的问题是: 1 – mnesia可以支持大概2000个table的schema吗?在性能上会出现什么瓶颈或问题或side effect吗? 2 – 我自己手动这样mapping的效果好,还是用mnesia fragment table的效果好呢?貌似,我这样的mapping查找起来的时候,比fragment要快。可是就是不知道容错和分布式性能上怎么样?
Yu Feng Reply:September 7th, 2010 at 3:22 pm
1. 2000个表太多了点。 2. 最好用mnesia自己的fragment 3. dets的问题未来我觉得会引入新的更强的替代品,官方在考虑这个事情。
@Yu Feng 看了mnesia_frag的源代码,原来他的所做的和我所想的方法几乎是差不多的,而且也有foreign_key,那么我直接用mnesia 自带的 fragmant 就好了~~谢谢,大牛指点~~
Yu Feng Reply:September 10th, 2010 at 10:07 am
不客气的,分片是mnesia很重要的一个特性。
@Yu Feng 哇,好公司啊,在广州有没有分部啊?
为何从JAVAEYE搬出来,还有你的“推”,我如何才能访问?
Δ
hi,想请教一下mnesia的查询,又没办法做到模糊查询的?例如 name=“abcdefghij”,如果用sql查的话可以是:like “%cdef%”这样可以查到,但mnesia怎么可以做到?我看文档,找网络,都找不到。谢谢了!
[Reply]
mnesia是个数据源,只支持基本的查询操作, 复杂的查询条件是由 qlc模块来支持的。你说的功能可以用match_specification来做。
[Reply]
:)谢谢你的回答,能否给我match_specification的链接?我没找得到。
[Reply]
:)找到了,我先看看,不明白再请教。
[Reply]
问一下老大,erlang开发大型网络游戏的前景如何?
ND有这个应用的打算吗?
[Reply]
yu feng Reply:
November 26th, 2009 at 3:51 pm
我觉得很适合做大型的网游 部分历史代码由port或者cnode已经nif承担,整个开发很轻松的。
ND 老板很看好。。。
[Reply]
小弟不才,一直想在互联网这条路上混出点成绩来,以前都只是给别人做做小企业网站,也运营过地方论坛,但都没有什么成效,随着As3和Flex的发展,小弟对日后的发展也做了一定调整,想在休闲网页游戏方面试一试,主要是面向地方结合先下运营(小弟是广东佛山的),所以之前自学了as3了Flex,As3相对比较熟悉一点,Flex则大概了解了一遍.现在开始弄服务器端的编程,可是没有什么这方面的基础和实际经验,C/C++相信学习成本和难度高了些,用java也尝试过了解过,后来知道了Erlang,觉得用Erlang做的话应该很适合的,因为在我的架构里,主要是编写基于TCP协议方面的通信,但苦于没有更好的实战资料,自己的英文又基本是靠翻译才勉强看得明白的程序,苦恼啊!苦恼啊!
本人目前要解决的问题如下:
1.as3(多客户端)与于Erlang的通信问题.
2.游戏大厅的服务器架构
3.具体游戏的服务器架构(小弟主要想做的是网络棋牌对战类的网页Flash版的游戏).
可能还有一些实际问题我没有遇到和想到,现在的我就在这卡主了,不知道该如何进行下去.
小弟真诚求学,现在已经辞掉了工作,专心于这方面的学习了.
当然,不能让余丰大哥太过雷锋的,小弟愿意有偿请教!当然,小弟积蓄也是有限啊!还望大哥能体谅.
小弟计划花半年的时间掌握这方面的知识,花半年时间来开发产品,再投入运营!
希望余丰大哥百忙中能为小弟指点一二.
再次祝愿余丰大哥在新的一年里余丰余丰,御风而上,玉树临风.
[Reply]
我在调分布式编程的KVS程序时出了问题:
>rpc(call(gandalf@20090909-1351,kvs,store,[weather,fine]).
出了错:
**exception error:bad argument in an arithmetic expression
in operator -/2
called gandalf@20090909-1351
请教问题出在哪儿?
[Reply]
Yu Feng Reply:
March 30th, 2010 at 1:46 pm
gandalf@20090909-1351 这个不是atom
正确的写法是 ‘gandalf@20090909-1351’
[Reply]
谢谢,已经正确了
[Reply]
大牛,俺是一名java程序员,工作两年多,一直关注着erlang,业余时间学习erlang半年有余,现在感觉没多大长进了,能否提供一些方法和建议。
[Reply]
Yu Feng Reply:
April 5th, 2010 at 4:48 pm
猛看代码 猛写代码. 推荐看看如mochiweb hotwheels这样的短小又写的好的模块. 光知道语法啥用没有!
[Reply]
Hi,本人在使用mnesia的过程中,发现log里常有:
** WARNING ** Mnesia is overloaded: {mnesia_tm, message_queue_len, “mm”}
这样的警报信息。而我对mnesia的使用是很轻量级的,只有4个表,最大不超过2000条数据,没有理由超载。上网google了一下,网上对此问题众说纷纭,莫衷一是。
请教下此信息因何产生?能通过什么思路调优?在此拜谢。
[Reply]
@Atlas
846 Threshold = 100,
847 Prev = S#state.tm_queue_len,
848 {message_queue_len, Len} =
849 process_info(Pid, message_queue_len),
850 if
851 Len > Threshold, Prev > Threshold ->
852 What = {mnesia_tm, message_queue_len, [Prev, Len]},
853 mnesia_lib:report_system_event({mnesia_overload, What}),
854 {noreply, S#state{tm_queue_len = 0}};
check_overload是10秒钟一次, 你打印警告信息的原因是在过去的20秒里面,你的mneisa_tm的消息队列的长度都超过了100. 也就是说你的事务交易积累太多.
原因可能有2个:
1. 你的提交的事务资源竞争, 事务未能很快完成.
2. 你的机器处理能力有限, 不能很快处理事务.
[Reply]
@Yu Feng
感谢。
那mnesia_tm的作用是什么呢?为什么Len不能超过100?这个100的数量能不能增加的?
因为我的系统业务模型比较复杂,所以我采用了原子型事务的方式,既每个业务都拆分成若干原子事务,每个原子事务都是独立的事务,可以作为不同业务的组成部分,也可以独立使用。所以事务交易积累是比较多。
但如果我要改变这种原子型事务的结构,改成每个业务都是一个超级大事务,那么对整个体系改动太大。目前我的系统用户量和负载都很小,我观察过server,平均cpu负载都在5%以下,内存都在10%以下,我认为应该有充足的系统资源来满足mnesia的要求。我能不能通过改变某些配置来提高这个Threshold的值?
[Reply]
你好!在学习Erlang的OTP编程,在第18章P276,1>alarm_handler:set_alarm(tooHot).有问题,** exception error: bad argument
in function gen_event:send/2
请教不知问题出在哪儿?
[Reply]
Yu Feng Reply:
April 24th, 2010 at 4:25 pm
看起来好像是 gen_event要发送的进程不存在.
[Reply]
谢谢余先生,我的环境是WINDOWS,所以先要运行erl -boot start_sasl,问题就解决了。但现在的问题是WINDOWS下运行eerl -boot start_sasl后emacs平台就没有了。我想请教:既保持emacs环境又能带参数的运行erl?
[Reply]
@zfz
-boot start_sasl 和 -boot start_clean(默认的) 的区别是多启动了sasl应用.
所以你可以在运行你的程序前运行
application:start(sasl).
效果是一样的.
[Reply]
@Atlas
这个我个人感觉是你没用对mnesia, 你的瓶颈在锁和事务交互上了.
[Reply]
client_connect(Id, Pw) ->
case gen_tcp:connect(“localhost”,6720,[binary,{packet,4}]) of
{ok, Socket} ->
%先发送认证消息
case login_info(Socket,Id,Pw) of
{ok} ->
io:format(“pass login_info~n”),
send_msg(Socket);
{einval} ->
{false_in_login}
end;
{error,Why} ->
{Why}
end.
%向服务器发登陆认证
login_info(Socket,Id,Pw) ->
Msg = {login,Id,Pw},
case gen_tcp:send(Socket, term_to_binary(Msg)) of
ok ->
% io:format(“login_info ok:~p~n”,[Self]),
io:format(“send ok:~n”),
case gen_tcp:recv(Socket,0) of
{ok,B} ->
io:format(“recv ok:~n”),
{ok};
%在这里套接字出错Why变为einval
{error,Why} ->
{Why}
end;
{error,closed} ->
closed
end.
%%%%%%%%%%%%%%%%%%%%%
%服务器在这里最后响应,同时也是问题出现的地方
loop(Socket) ->
io:format(“loop~n”),
case gen_tcp:recv(Socket, 0) of
{ok, Data} ->
%处理信息,发送信息到client_manager让其处理向客户端发送消息事件
%处理两种请求,一种登陆认证,另一种是消息传输
io:format(“loop ok~n”),
case binary_to_term(Data) of
{login,Id,Pw} ->
%认证登陆
io:format(“in loop~n”),
%在这里出现了问题
gen_tcp:send(Socket,term_to_binary({ok})),
io:format(“after send~n”),
{login_check_now};
Data_send ->
io:format(“in loop no:~n”),
client_manager ! {data,Data_send},
loop(Socket)
end;
{error, closed} ->
%不清错失败原因和出处时的处理方式,(待处理)
client_manager ! {disconnect, Socket},
{error, closed}
end.
现在问题在于gen_tcp:send(Socket,term_to_binary({ok}))上调用的话在login_info那里受到的einval的套接字出错的问题
现在不知道问题出现在哪里?不知道能怎么样修改,谢谢余丰大哥了
[Reply]
Yu Feng Reply:
April 30th, 2010 at 11:24 am
{login_check_now}; 后loop 中止, 因为看不到你的其他代码, 但是基本上是由于loop中止, 进程退出。 进程退出的时候, 会关闭所拥有的port. gen_tcp是个port.所以你的socket就会被服务端关闭。
[Reply]
谢谢余先生,现在还是有一些问题,一、application的相关技术文档哪儿有?二、错误日志配置文件又如何加载上去?如:erl -boot start_sasl -config elog3中的sasl应用已经可用application启动了,但elog3错误日志配置如何启动?
[Reply]
@zfz
这些文档otp的随机带的文档里面写的非常清楚的,你可以先好好读下!
[Reply]
请教:在WINDOWS环境下错误日志配置文件elog3.config如何加载启用?
[Reply]
@zfz
不明白你的问题是什么? 但是我建议不要在windows下开发。你可以用virtualbox安装个ubuntu来使用,windows不大适合otp开发。
[Reply]
感谢!我的问题是:《Erlang程序设计》一书中第十八章很多地方用到SASL的配置,主要是错误日志的配置,如书中P273,日志在shell和循环日志中同时输出的配置文件elog3.config,但如何在WINDOWS环境下加载启用?我现在不是用于开发而是用于教学。你讲的方法我会试试。
[Reply]
@zfz
Erlang是完全平台移植的,这意味所有的命令行参数和使用习惯都是一样的,除了平台相关的东西,比如说文件路径。 你的疑惑是估计是这样的: unix平台下用的文件路径如/var/log/xxx.log 在windows下应该改成如c:\\var\\\log\\xx.log
[Reply]
一定叨唠了。但还得叨唠。
在WINDOWS下,“运行”命令行:
erl -boot start_sasl -config elog3
出错:{“could not start kernel pid”,application_controller,”error in config file\”./elog3.config\”(none):configuration file not found”}
可是在 e:\erl5.7.3\bin 下有 elog3.config 文件。因为错误信息一闪而过,今天才看清。
请教问题出在哪儿?
[Reply]
@zfz
./elog3.config 不是写的很明白吗, 是在当前目录下读呀。。。
[Reply]
感谢!“当前目录读取”:只把erl启动前加上e:\erl5.7.3\bin便可。既WINDOWS下“运行”命令行为:
e:\erl5.7.3\bin erl -boot start_sasl -config elog3
在此命令行中,参数-boot start_sasl 可在>下运行:
>application:start(sasl).
来取代。现在的问题是:命令行参数
-config elog3
可用什么来代替?
因为命令行开启的Erlang平台没了emacs编辑开发平台。
[Reply]
@zfz
抱歉,确实不明白你的emacs和erlang有什么关系。
干吗说, emacs平台没了?
[Reply]
启动Erlang我认为有两种方式。
一是在WINDOWS平台上:开始->运行->打开,键入
e:\erl5.7.3\bin erl -boot start_sasl -config elog3
就进入了Erlang环境。此时-boot start_sasl和-config elog3都起到了作用。仅有ESell,编辑Erlang程序很不方便。
二是启动emacs后:file->open file,选择一个.erl文件,在emacs上就有一个Erlang菜单项。此时可编辑Erlang程序、编译Erlang程序,也有Erlang的Sell。第一种方式命令行中的参数-boot start_sasl 可在>下运行:
>application:start(sasl).
来取代。我的问题是:现在希望第一种方式命令行参数
-config elog3
也起作用,那么可用什么来代替呢?
也就是:第一种方式开启Erlang平台,命令行参数-boot start_sasl和-config elog3都能起到作用,可是没有了emacs环境,编辑程序很不方便。第二种方式开启Erlang平台,编辑、编译、Shell集成了,很方便,命令行参数-boot start_sasl可用>application:start(sasl).来实现,可命令行参数-config elog3又能用什么来实现?
[Reply]
Mr Yu Feng 你好~我最近在研究聊天室方面的,我看到有个聊天室做到了一个房间同时有1W多人的,
ejabberd貌似说支持单台服务器3000-5000,但是它好像不支持聊天室或者群组这种形式。。
我想问问用erlang做聊天室可不可以做到单个房间1W人啊?先谢谢了。。。
现在是不是有比书店那些书上写的其他高效的方法啊?
[Reply]
Yu Feng Reply:
May 31st, 2010 at 1:10 pm
你从哪里看来的数字ejabberd才这么点? 这个数字如果是活跃的还差不多, 如果算在线的话, × 10差不多。 erlang的IO是能强大的。 你说的书上,不是你看了programing erlang就开始打算做这个系统吧?
[Reply]
想照着VC 6.0书上的例子做得~呵呵
它上面是先把消息发到服务器,然后服务器转发到list里面
Yu Feng老大还有其他高效点的方法吗?
[Reply]
Yu Feng Reply:
May 31st, 2010 at 11:38 pm
看点书就做这种项目个人感觉很不靠谱!
[Reply]
Yu Feng老大,那ejabberd对群组的支持好不好啊?
我在GOOFLE上搜索了下貌似只有一个客户端的软件支持~??
[Reply]
余老师,您好!
我最近在研究tsung。遇到了一个问题,请教下您。
firefox设置了localhost:8090代理,开启tsung recorder后,在录制的session里没有内容。
[Reply]
@武彻
这个问题已经解决了。是1.2.2的版本有问题。我用1.3.1就不存在此问题
[Reply]
@zfz
我也遇到同样的问题,貌似参数不对?
man上是这样写的
set_alarm(alarm())
Types alarm() = {AlarmId, AlarmDescription}
AlarmId = term()
AlarmDescription = term()
Sets an alarm with id AlarmId . This id is used at a later stage
when the alarm is cleared.
[Reply]
弱弱地问一句ND是什么公司啊?
[Reply]
Yu Feng Reply:
September 10th, 2010 at 10:35 am
ND=网龙 上市的游戏公司。
[Reply]
博主,有一问题请教。
我要用mnesia存放一些,持久化的用户数据。可是,用户比较多,大概1M。然后,每个用户又会有很多物品,每个用户的每一物品有一个记录。这样我打算用这样的schema来存储我上面提到的业务,-record(user, {user_id, user_info, …}). -record(items, {item_id, user_id, item_info}).
可是众所周知,mnesia有4G的限制。所以,我打算用table name mapping的方法来存放,具体是用list_to_atom(lists:concat([‘user_’, erlang:phash(user_id, 100)])),来作为table的名字。然后我的问题是:
1 –
[Reply]
博主,有一问题请教。
我要用mnesia存放一些,持久化的用户数据。可是,用户比较多,大概1M。然后,每个用户又会有很多物品,每个用户的每一物品有一个记录。这样我打算用这样的schema来存储我上面提到的业务,-record(user, {user_id, user_info, …}). -record(items, {item_id, user_id, item_info}).
可是众所周知,mnesia有4G的限制。所以,我打算用table name mapping的方法来存放,具体是用list_to_atom(lists:concat([‘user_’, erlang:phash(user_id, 100)])),来作为table的名字。然后我的问题是:
1 – mnesia可以支持大概2000个table的schema吗?在性能上会出现什么瓶颈或问题或side effect吗?
2 – 我自己手动这样mapping的效果好,还是用mnesia fragment table的效果好呢?貌似,我这样的mapping查找起来的时候,比fragment要快。可是就是不知道容错和分布式性能上怎么样?
[Reply]
Yu Feng Reply:
September 7th, 2010 at 3:22 pm
1. 2000个表太多了点。
2. 最好用mnesia自己的fragment
3. dets的问题未来我觉得会引入新的更强的替代品,官方在考虑这个事情。
[Reply]
@Yu Feng
看了mnesia_frag的源代码,原来他的所做的和我所想的方法几乎是差不多的,而且也有foreign_key,那么我直接用mnesia 自带的 fragmant 就好了~~谢谢,大牛指点~~
[Reply]
Yu Feng Reply:
September 10th, 2010 at 10:07 am
不客气的,分片是mnesia很重要的一个特性。
[Reply]
@Yu Feng
哇,好公司啊,在广州有没有分部啊?
[Reply]
为何从JAVAEYE搬出来,还有你的“推”,我如何才能访问?
[Reply]