10 2011 档案

erlang debug 调试
摘要:erlang 提供了一个debugger 调试工具,可以用来单步调试自己的代码。可以在shell 中输入im() 或 debugger:start() 来调出。首先打开的是一个Monitor 窗口:在这里可以选择要调试的代码:选择Module--> Interpret。注意调试的文件必须要通过debug_info 的方式进行编译: c(module.erl,debug_info)点击后出现第二个窗口IntepretDialog:可以在Directories中选择调试文件所在目录,在右侧Files中选择要调试的代码文件。选择后在Monitor 窗口中就会出现选择的文件,可以双击打开View 阅读全文

posted @ 2011-10-25 21:30 心笑峰 阅读(4903) 评论(0) 推荐(0) 编辑

用消息队列和消息应用状态表来消除分布式事务
摘要:用消息队列和消息应用状态表来消除分布式事务by 方刚 由于数据量的巨大,大部分Web应用都需要部署很多个数据库实例。这样,有些用户操作就可能需要去修改多个数据库实例中的数据。传统的解决方法是使用分布式事务保证数据的全局一致性,经典的方法是使用两阶段提交协议。长期以来,分布式事务提供的优雅的全局ACID保证麻醉了应用开发者的心灵,很多人都不敢越雷池一步,想像没有分布式事务的世界会是怎样。如今就如MySQL和PostgreSQL这类面向低端用户的开源数据库都支持分布式事务了,开发者更是沉醉其中,不去考虑分布式事务是否给系统带来了伤害。事实上,有所得必有所失,分布式事务提供的ACID保证是以损害系统 阅读全文

posted @ 2011-10-22 18:43 心笑峰 阅读(3141) 评论(0) 推荐(2) 编辑

Openfire 好友状态的发送(用户登录)
摘要:客户端在登录 Openfire 时都会收到自己订阅的好友状态,那么这个好友状态是怎么下发下去的呢? 用户在登录后会发送一个<presence> 来更新自己的状态,在PresenceRouter 中进行处理。这个presence 交由PresenceUpdateHandler 处理,在判断用户为注册用户后使用RosterManager.getRoster() 来获取所有已经订阅的其他用户。针对每个用户判断关系类型,如果为SUB_FROM,SUB_BOTH 则说明此用户为订阅了自己的。 先向订阅了自己的用户广播状态更新消息。调用initSesion(),从中取出SUB关糸为SUB_TO 阅读全文

posted @ 2011-10-21 18:01 心笑峰 阅读(3638) 评论(0) 推荐(0) 编辑

ejabberd分析(五)+订阅/添加好友
摘要:模块ejabberd_c2s中,状态为session_established2。用户发送iq set 消息到服务器<iq id="M8QF3-52" type="set"><query xmlns="jabber:iq:roster"><item jid="1555215557@kinglong" name="1555215557"><group>Friends</group></item></query>< 阅读全文

posted @ 2011-10-13 12:20 心笑峰 阅读(3048) 评论(0) 推荐(0) 编辑

Openfire 的 Cache机制
摘要:Openfire 中多处用到了Cache 来存储那些访问较为频繁的数据,例如userManager中的userCache,rosterManager 中的rosterCache。以下为Openfire中Cache的实现机制:1. Cache 接口:interface Cache<K,V> extends java.util.Map<K,V>提供了基本的Cache接口方法。2. Cacheable 接口:interface Cacheable extends java.io.Serializable继承了序列化接口,如果是自己定义的数据需要存储在Cache中,则需要实现此 阅读全文

posted @ 2011-10-08 22:31 心笑峰 阅读(3851) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示