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說的情況了。