- 浏览: 113728 次
最新评论
-
ribavnu:
楼主,你的clientinfo.hrl文件是什么啊?转载的别人 ...
Erlang 聊天室程序( 一) -
wenwushuangquandexia:
晕倒,谁用我号给你评论了。。。。
系统中字典表该怎么用 -
Jason_Bourne:
楼主,请问多个客户端向一个主题发送消息,服务端如何通过这个主题 ...
手机上的消息推送 -
yjl49:
wenwushuangquandexia 写道 大哥,你在讲故 ...
系统中字典表该怎么用 -
wenwushuangquandexia:
大哥,你在讲故事吗
系统中字典表该怎么用
文章列表
目前android应用不如人意的一点就是收费,大批开发者靠着内置广告点击、应用推广下载收入微薄。苹果开发者由于有苹果这么个平台,收入颇丰。这里介绍下android中的SP计费方式,为各位androider多一种赚钱的选择。
...
移动应用软件开发中比较重要的一点就是客户端的标识。所谓的“标识”就是指给每个发布出去的客户端一定的预置属性,方便我们在软件更新、数据统计、
商业合作、版本控制等等场合对这些客户端进行区别分类。天 ...
最近在找android手机上的消息推送的解决方案。目前看来有以下几种常用的方式:
1.定期查询:按照指定的时间间隔连接服务器查询获取最新的消息。实现起来简单,非实时,查询时间过短则流量耗费多,耗电量大。下面是一个爱立信的测试结果:
2.短信方式:需要及时发送消息给客户端时也可以通过这种方式,但大家都懂的,这个很花钱。
3.长轮询:基本上与目前很多网站使用的方式一样(WEB阿里旺旺、微博、人人等等)。客户端发起一个很长超时时间的请求,然后服务器端在没有消息的时候阻塞这个请求(一直不给返回值)直到快要超时为止,有消息到来再返回响应。客户端收到响应或超时后立即再发起请 ...
项目中遇到一个ID生成策略的需求:需要在系统中为每个用户分配一个ID用作以后的用户标示。这个需求应该是非常普遍的,对于使用人数较少的系统而言不会
是一个问题,不过对于向用户众多的互联网系统来讲这不是一个简 ...
移动互联网不是互联网,无论从网络环境还是从终端状况看都不能简单套用后者的那一套。
用户注册时要讲求个“快”字。不要让用户输入一大堆东西:什么密码、邮件、用户名......在目前手机上输入不太方便的情况下,这是找“SHI”------要么被弃之不用、要么被卸载。
有很多应用将手机号码作为注册时的ID,包括后台数据库设计也是如此。个人建议抛弃这种做法。
一是很多智能手机并不能直接获取到手机对应的号码,只有IMSI,IMEI一类的信息,而这些信息与号码的对应关系是存放在运营商那里的,所以会有一个号码的间接获取过程(这个过程并不轻松 ...
一个常见的情况: supervisor 下启动了N个子进程,如何访问这些子进程?
一般可以通过两种方式:
1.通过PID
所有的子进程在创建完成后都会有相应的PID,将这些个PID存到本地的表中,需要时通过PID去访问进程。
2.通过进程名
在注册一个进程的时候为其指定相应的名称,需要时通过进程名访问进程。
下面为一个简单的例子:
建立一个supervisor ,采用simple_one_for_one ...
Erlang 中的supervisor子进程的启动策略定义除了one_for_one、one_for_all、rest_for_one还有一种比较常用的simple_one_for_one。
这种策略与one_for_one比较相似,但在supervisor:init中定义的子进程只能有一个,以后启动的子进程都是以这个为模板产生,且在supervisor 启动时不会主动启动任何子进程,需要自行使用supervisor:start_child 来启动。
这么做的好处是明显的:例如一个接收客户端连接的socket supervisor进程在刚启动的 ...
假设某天某公司做了一个拥有很多子系统的项目,其中有一些公共的字典表可能被多个子系统用到。例如一个产品类型表tb_product,基本的字段有 fid(ID),fname (名称),fprice (价格)。
在A子系统中需要一个标 ...
Erlang 尾递归
- 博客分类:
- Erlang
尾递归就是在一系列语句的最后又跳转到被调用函数的开头。这里的“最后”两个字很关键,不正确的递归调用会吃光你的内存。
litaocheng 在他的blog中就提到过一个很好的例子:here
观察下面的代码:
do_t1() ->
try
recive
_->
do_t1()
end
catch
_:_ ->
do_t1()
end.
...
接着上一篇,这次处理“维护当前可用的主题房间信息”问题。 每次使用startChild启动子进程的时候将当前的房间信息保存到ets表中。更重要的是每次主题房异常退出或重启都要更新对应的信息。
修改room_manager.erl中的内容:
新建一个函数来初始化房间信息表:
initTab()->
ets:new(roominfo,[public,
ordered_set,
named_table,
{keypos,#roominfo.id}
] ...
DELIMITER $$
USE `db_im`$$
DROP PROCEDURE IF EXISTS `P_bi_parasIP`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `P_bi_parasIP`(
IN Pi_ipstr VARCHAR(50),
OUT Po_int1 INT,
OUT Po_int2 INT,
OUT Po_int3 INT,
OUT Po_int4 INT,
OUT Po_ret INT
)
BEGIN
DECLARE v_strtemp VARCHAR(50);
DEC ...
之前实现的功能相当于一个大厅,这里我们为这个聊天室程序添加“主题房间的功能”。客户端登陆后处于大厅中,然后获取目前所有的主题房间,再发送消息进入到某个房间内。同一房间的成员可见,发送的消息也只限本房间可见。
为了管理这些房间,Erlang Opt中的监控树是最合适的。
新建一个模块room_manager.erl 其行为遵守gen_supervisor,子进程为chat_room
init(Para)->
{ok,
{
{one_for_one,3,5},
[
{the_room,
{chat_room, ...
Erlang 聊天室程序(七) 获取在线用户
- 博客分类:
- Erlang
先定义消息格式如下:
请求: #message{type="get",subject="clientinfo",content="all"}
响应:#message{type="result",subject="clientinfo",content=[#clientinfo,#clientinfo,.....]}
修改客户端发送请求消息部分:
clientThread.sendMsg(new Message("get","client", ...
如果要转换到的Bean类中含有类似ArrayList、Map、List这样的集合时,要对集合进行处理,否则会报“net.sf.ezmorph.bean.MorphDynaBean cannot be cast to XXX”
这样的异常。
处理方法如下:
1.定义一个Map
Map <String,Class> mymap = new HashMap<String,Class>();
2.向Map中put Bean中集合成员名和对应的类型
mymap.put("content",ClientInfo.class); //我这 ...
上篇
开了个头编写了基本的框架,这次连同客户端服务器端代码一起完善下。
首先修改客户端代码:
之前在数据交换
部分,客户端中定义了一个Message bean类,里面包含了发送一条消息所需要的基本信息,包括id、type、subject、from、to、content等。但这里的
content是一个String 类型,如果要表示更复杂的消息就不太适用了。
由于所有的消息id、type、subject、from、to 这几个成员的类型是确定的,对应的操作方法也是固定的,所以我们抽象出一个抽象类:Packet 用来表示交互中的所有消息:
Packet.java:
...