1. 利用Eclipse+openJTAG调试文件
1、准备基本开发环境(jdk、eclipse),部署步骤不一一赘述;
2、从网上下载openfire的源码(我下载的是openfire3.7.0),解压文件夹;
3、启动eclipse,使用openfire源码新建java工程,简单方法是将解压源代码放到workspace中,新建工程与文件夹名称相同,eclipse会自动为我们把文件加载进来;
4、工程创建完成后我遇到了一个问题:cluster插件报错,出现类找不到的错误,难道源码下载不全,google一下知道,原来少了几个jar包(coherence.jar、coherence-work.jar、tangosol.jar),下载之,在出错的插件clustering文件夹中与src平级建立文件夹lib,将三个jar包放到文件夹中,刷新工程,错误消失了;
5、添加Ant透视图,在Ant透视图中添加build.xml文件(文件在build目录下),打开树,双击openfire[default]进行编译;
2. openfire做服务器,网页客户端怎么做
如果你下载的是exe文件,执行你的安装文件,进行安装。这里我是zip的文件。解压后,复制openfire目录到F:\Program Files (x86)\Openfire目录(自己平常安装软件的路径下就可以)下, 这样openfire就安装完成了。
下面我们启动openfire服务器,并配置它。在F:\Program Files (x86)\Openfire\bin目录下有一个电灯泡的openfire.exe文件,双击执行,启动完成后可以看到
.点击Launch Admin按钮进入http://127.0.0.1:9090/setup/index.jsp页面,配置openfire服务器。
选择简体中文版——配置服务器域名(一般都是本机自己的名称,我的是txw-pc,其他不变)——数据库设置(选择Openfire自带的)——管理员账户可以跳过——完成
登录到Openfire管理控制台,初始用户名admin,密码admin.
服务器名称就是jwchat的连接地址;你可以使用Spark、jwchat链接这个地址进行IM通信聊天……
.测试,使用我下面下载的的一个源码MyXmpp.zip测试。解压导入Eclipse之后,将下图中XmppTool.java中的IP地址改为你自己主机的IP地址就行
天互数据 为您解答,希望能帮到你
3. openfire怎么不修改源码加入消息回执
遵循原则:
1.message 消息的id由服务端或者客户端统一生成,采用全球唯一id生成策略。
2.客户端收到 message消息后必须回执服务端
3.取消openfire服务器消息总是存储的设置
4.设置openfire离线表ofoffline的messageId字段为字符串类型
实现:
创建openfire组件类:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xmpp.component.Component;
import org.xmpp.component.ComponentException;
import org.xmpp.component.ComponentManager;
import org.xmpp.packet.JID;
import org.xmpp.packet.Message;
import org.xmpp.packet.Packet;
/**
* 处理 回执信息
*
* @author longyingan
*
*/
public class ReceiptComponent implements Component {
private static final Logger log = LoggerFactory.getLogger(ReceiptComponent.class);
private final static String name = "receiptComponent";
@Override
public String getDescription() {
return null;
}
@Override
public String getName() {
return name;
}
@Override
public void initialize(JID jid, ComponentManager componentManager)
throws ComponentException {
}
@Override
public void processPacket(Packet packet) {
if (packet instanceof Message) {
if (packet.getTo() != null
&& packet.getTo().getDomain()
.startsWith("receipt")) { // 群消息回执
Message message = (Message) packet.createCopy();
// 获取消息 id 和 用户
String messageId = message.getID();
String username = message.getFrom().getNode();
// 删除离线消息
if (!StringUtils.isEmpty(messageId)){
//TODO 删除openfire离线表的对应数据
}
}
}
}
@Override
public void shutdown() {
}
@Override
public void start() {
}
}
创建消息拦截类,把所有message消息存储离线:
import java.util.Date;
import java.util.Random;
import java.util.UUID;
import org.apache.commons.lang.StringUtils;
import org.dom4j.Element;
import org.dom4j.QName;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.interceptor.PacketInterceptor;
import org.jivesoftware.openfire.interceptor.PacketRejectedException;
import org.jivesoftware.openfire.session.Session;
import org.jivesoftware.util.XMPPDateTimeFormat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xmpp.packet.JID;
import org.xmpp.packet.Message;
import org.xmpp.packet.Packet;
/**
* 搜索引擎拦截器
* @author longyingan
*
*/
public class SearchEngineInterceptor implements PacketInterceptor {
private static final Logger log = LoggerFactory.getLogger(SearchEngineInterceptor.class);
Random m_rndGen = new Random();
@Override
public void interceptPacket(Packet packet, Session session,
boolean incoming, boolean processed) throws PacketRejectedException {
// 程序执行中;是否为结束或返回状态(是否是当前session用户发送消息)
if (processed || !incoming) {
return;
}
if (packet instanceof Message) {
if(packet.getTo()!=null
&& !XMPPServer.getInstance().getServerInfo().getXMPPDomain().equals(packet.getTo().getDomain())
||("receipt."+XMPPServer.getInstance().getServerInfo().getXMPPDomain()).equals(packet.getFrom().getDomain()))
return ;
//TODO 1.存储消息到openfire 离线表
//TODO 2.如果message 没有 id 则产生一个保持
//TODO 3.根据自己的业务判断哪些需要存储,哪些不需要
}
}
}
好,到这来服务端的两个主要类代码已经完成。下面写个客户端如何测试的例子(只是一个简单事例,可能用的时候不是这样的哈):
Chat chat = ChatManager.getInstanceFor(connection).createChat(
"xxx服务器的域", new MessageListener() {
public void processMessage(Chat chat,Message message) {
System.out.println(message.toXML());
Message rep = new Message();
rep.setFrom(message.getTo());
rep.setTo("receipt." + message.getFrom());
rep.setPacketID(message.getPacketID());
rep.setBody("null");
rep.setType(Type.chat);
try {
connection.sendPacket(rep);
} catch (NotConnectedException e1) {
e1.printStackTrace();
}
}
});
4. im即时通讯源码哪里有呢想搭建一个即时通讯
即时通讯im源码可以用即构科技的,即构科技提供即时通讯示例源码,开发者通过IM SDK和API可快速开发IM功能,比自主开发节省90%时间和成本,支持发送文本、图片、文件、自定义消息、呼叫邀请CallKit等消息类型,同时支持通过自定义消息定制业务特殊消息类型,让您快速实现实时聊天场景消息收发。
5. openfire 淇鏀逛简婧愮爜 镐庝箞镓揿寘
鐪嬩綘鍐欑殑鎻掍欢鎻愪緵浠涔堟湇锷$殑鍟婏纴濡傛灉鏄痺eb service 鐩存帴鍙戦佽锋眰灏卞彲浠ヤ简銆
濡傛灉鏄闇瑕佹湁web鐣岄溃锛屽綋浣犻厤缃濂绖ml鏂囦欢锛屽啓濂絯eb椤甸溃锛岄氲繃web鐣岄溃镎崭綔灏卞彲浠ヤ简钖с伞
6. 把openfire源码导入后出现错误 com.tangosol.ut ,找不到这个包
貌似遇到过,没记错的话 这个应该是在cluster 集群那个插件中的包。
openfire的集群需要依赖Oracle的coherence.jar、coherence-work.jar、tangosol.jar包,你可以在网上找找这几个包,或者oracle的网站上应提供下载的,进行配置后,就不会出现lz说的情况了。