- 浏览: 112920 次
最新评论
-
ribavnu:
楼主,你的clientinfo.hrl文件是什么啊?转载的别人 ...
Erlang 聊天室程序( 一) -
wenwushuangquandexia:
晕倒,谁用我号给你评论了。。。。
系统中字典表该怎么用 -
Jason_Bourne:
楼主,请问多个客户端向一个主题发送消息,服务端如何通过这个主题 ...
手机上的消息推送 -
yjl49:
wenwushuangquandexia 写道 大哥,你在讲故 ...
系统中字典表该怎么用 -
wenwushuangquandexia:
大哥,你在讲故事吗
系统中字典表该怎么用
文章列表
JAVA里面有时候需要定期地处理某些任务,例如:定期地查询数据库提取数据;定期地清理超时数据;定期地将内存中数据存到数据库。
一种方法是自己写线程,自己控制。另一种方法就是利用java.util.Timer 和 java.util.TimerTask 来实现。
下面就以一个将队列中数据定期存入数据库的例子展示这种用法:
import java.util.TimerTask;
import java.util.Timer;
public class Myservice{
private Queue<String> logs = new LinkedBlocking ...
创建好了Chat room 后就可以通过邀请或用户主动加入的方式添加成员。过程与创建聊天室的相似,不用点在于聊天室已存在,不需要再重新创建,只需将当前用户加入即可。用户发送聊天消息是直接发送给Chat room 的,再由Chat Room转发给所有用户。详细时序图如下:
用户发送查询iq消息后,再发送presence消息创建聊天室:
<presence id="8Li34-12" to="roomname@conference.myserver/clientA">
<x xmlns="http://jabber.org/protocol/muc"></x>
</presence>
处理的时序图如下:
1. 用户发送的presence 消息被路由到ChatService中处理。
2.ChatService中保存 ...
<pre name="code" class="java">public class StringUtils{
private static Random randGen = new Random();
private static char[] letters =("0123456789abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();
//获取指定长度的随机字符串
...
erlang debug 调试
- 博客分类:
- Erlang
erlang 提供了一个debugger 调试工具,可以用来单步调试自己的代码。可以在shell 中输入im() 或 debugger:start() 来调出。
首先打开的是一个Monitor 窗口:
在这里可以选择要调试的代码:选择Module--> Interpret。
注意调试的文件必须要通过debug_info 的方式进行编译: c(module.erl,debug_info)
点击后出现第二个窗口IntepretDialog:
可以在Directories中选择调试文件所在目录,在右侧Files中选择要调试的代码文件。
选择后在Monitor 窗口中就会出现 ...
用消息队列和消息应用状态表来消除分布式事务
by 方刚
由于数据量的巨大,大部分Web应用都需要部署很多个数据库实例。这样,有些用户操作就可能需要去修改多个数据库实例中的数据。传统的解决方法是使用分布式事务保证数据的全局一致性,经典的方法是使用两阶段提交协议。
长期以来,分布式事务提供的优雅的全局ACID保证麻醉了应用开发者的心灵,很多人都不敢越雷池一步,想像没有分布式事务的世界会是怎样。如今就如MySQL和PostgreSQL这类面向低端用户的开源数据库都支持分布式事务了,开发者更是沉醉其中,不去考虑分布式事务是否给系统带来了伤害。
事实上,有所得必有所失,分布式事务提供的 ...
客户端在登录 Openfire 时都会收到自己订阅的好友状态,那么这个好友状态是怎么下发下去的呢?
用户在登录后会发送一个<presence> 来更新自己的状态,在PresenceRouter 中进行处理。
这个presence 交由PresenceUpdateHandler 处理,在判断用户为注册用户后使用RosterManager.getRoster() 来获取所有已经订阅的其他用户。
针对每个用户判断关系类型,如果为SUB_FROM,SUB_BOTH 则说明此用户为订阅了自己的。
先向订阅了自己的用户广播状态更新消息。调用initSesion(),从中取出SUB关 ...
模块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& ...
Openfire 中多处用到了Cache 来存储那些访问较为频繁的数据,例如userManager中的userCache,rosterManager 中的rosterCache。
以下为Openfire中Cache的实现机制:
1. Cache 接口:
interface Cache<K,V> extends java.util.Map<K,V>
提供了基本的Ca ...
客户端登出分为正常离线和断线,正常离线会发送presence 消息通知服务器,断线则无通知发送。
1. 正常离线:
客户端在离线之前发送<presence id='***' type ="unavailable"></presence>
由PresenceRouter 路由到PresenceUpdateHand ...
主从模式:
主服务器server1: 192.168.1.20 Mysql 5.0 需要备份的数据库 mydb
从服务器server2: 192.168.1.22 Mysql 6.0
1.备份现有数据:
最好先停止mysql service
使用[MysqlHome]:\bin\mysqldumple.exe工具 将现有数据备份成一个sql文件:
d:\>cd [MysqlHome]
[MysqlHome]>cd bin
bin:\>mysqldumple -u root -p mydb> d:\mydb.sql //有自己写的存储过程或函 ...
仍然看ejabberd_c2s 这个gen_fsm 模块。
RECV <stream:stream to="localhost" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">
SENT <?xml version='1.0' encoding='UTF-8'?><stream:stream xmlns:stream="http://et ...
ejabberd分析(二) 用户注册
- 博客分类:
- ejabberd
ejabberd中由ejabberd_c2s处理:
ejabberd_c2s模块启动后gen_fsm的状态位于wait_for_stream
客户端发送
<span style="color: #FF0000;" mce_style="color: #FF0000;"><stream:stream to="localhost" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" ...
通过前面的erlang(1)我们了解到了一个基本的服务器的实现方法。
erlang中为我们提供了这样一个服务器的现成的实现,就是gen_server,不用自己去编写服务器程序了。
所要做的就是以下几个事:
1.确定我们回调模块的名称
2.编写接口函数
3.实现六个回调方法
也就是说我们只需要关注于回调模块的实现就OK了。
1: -module(XXXX) 定义模块名称
2:接口函数,可供调用的函数。
在这里你可以定义所有需要的方法,作为功能调用的入口。
例如常见的start()、stop()等。他们的作用就是调用gen_server,完成指定功能。
3:实现 ...
- 2011-09-13 21:00
- 浏览 680
- 评论(0)
项目中需要 openfire 对外提供一个web接口,接受客户端发送过来的http 请求,按照参数处理后返回相应的response。
于是考虑使用servlet插件。
实现方法:
1.在src/plugins目录下建立如下结构的目录。
2.在java build path 中source 页添加 myservlet/src/java 目录。
3.在org.jivesoftware.openfire.plugin 包下新建class MyservletPlugin 实现Plugin接口;新建org.jivesoftware.openfire.plugin.myser ...