天天看點

[原創] 騰訊RTX二次開發相關的一些注意事項

在企業即時通信方面,騰訊的RTX在國内的占有率應該是很高的

是以,就避免不了要與其他系統進行消息內建

騰訊為此提供了二次開發的工具包,支援JAVA、C#、VB等多種開發語言

但是,目前為止,騰訊官方提供的開發包都是基于X86架構的,這個問題非常頭疼

如果采用JAVA進行內建,并且基于64位的JDK,那麼JNI是沒有辦法調用32位的RTX動态連結庫的(DLL),會提示“SDK錯誤:連接配接到SDK伺服器錯誤”

我開始時也是遇到了這個問題,嘗試了許久,後來通過EMAIL向官方的技術支援進行詢問,終于在更新了相關的連結庫檔案後順利解決

在此期間,也嘗試用.Net(C#)進行內建,雖然在相容性上也會有64位和32位的問題,但可以通過在釋出時指定為x86平台的方式解決

如果是WEB項目就更簡單了,可以在應用池裡設定32位相容性選項

下面把內建過程中的一些重點環節進行記錄,用于日後對自己有個交待:

1、從RTX官方下載下傳完整安裝包以及SDK開發包:

http://rtx.tencent.com/rtx/download/index.shtml

2、在伺服器上安裝完整安裝包中的RTX服務端程式:rtxserver2013formal.exe

3、在開發工作站上安裝SDK開發包中的服務端二次開發支援:rtxserversdk2013formal.exe

4、修改伺服器端IP位址允許規則:

  (1)采用JAVA方式內建,則修改:安裝盤/Tencent/RTXServer/SDKProperty.xml:

    在APIClient下增加子節點:

    <IP>開發工作站IP位址</IP>

  (2)采用.NET方式內建,則修改:安裝盤/Tencent/RTXServer/AppConnConfig.xml:

    在APIClient下增加子節點,内容同上

5、如果使用JAVA進行內建(可相容32/64位環境):

  在開發工作站上,拷貝:安裝盤/Tencent/RTXSSDK目錄下所有的.dll檔案,複制到:JDK安裝目錄/bin

  注意:如果使用的是64位的JDK,則還需要下載下傳相應的連結庫,分别覆寫到RTX服務端安裝目錄、System32、SysWOW64以及JDK/bin目錄下。

點此下載下傳

  具體開發案例檢視:安裝盤/Tencent/RTXSSDK/demo source/server sample/java

  其中的“RTXServer SDK Java語言支援文檔.doc”還是很詳細的

  以下是發送消息提醒的案例代碼,注意其中使用的端口号為:6000

  

import rtx.RTXSvrApi;

//...

RTXSvrApi rtxObj = new RTXSvrApi();
if (rtxObj.Init()) {
    rtxObj.setServerIP("RTXSDK的IP位址");
    rtxObj.setServerPort(6000);
    int iRet = 1;
    try{
        iRet = rtxObj.sendNotify("dong", "中文标題", "中文内容", "0", "0");
    }catch(Exception e){
        System.out.print(e.getMessage());
    }
    System.out.print(iRet);
}
rtxObj.UnInit();      

6、如果使用.Net進行內建(可相容32/64位環境):

  在應用中,引用:安裝盤/Tencent/RTXSSDK/demo source/server sample/csharp demo/rootobj/RootObj/bin/Debug/Interop.RTXSAPILib.dll 即可

  該目錄下還有官方提供的很多案例可供參考

  雖然沒有類似JAVA中的說明文檔有些可惜,但在使用上還是很簡單的

  如果開發工作站是64位的作業系統,那麼預設情況下還是會出現連接配接SDK伺服器錯誤的問題

  不過可以通過以下兩種方式進行解決:

  1)如果是桌面程式:可以在釋出時選擇面向x86平台,即可正常使用

  2)如果是WEB程式:可以在釋出到的IIS中,配置所使用應用池的32位相容選項為true即可正常使用

  以下是發送消息提醒的案例代碼,注意其中使用的端口号為:8006

RTXSAPILib.RTXSAPIRootObj RootObj = new RTXSAPILib.RTXSAPIRootObj();
RootObj.ServerIP = "RTXSDK的IP位址";
RootObj.ServerPort = 8006;
try {
    RootObj.SendNotify(rtxId, mTitle, 0, mContent);
} catch (Exception e) {
    throw new Exception(err); //抛出異常
}
return ret;      

7、注意事項

  1)JAVA方式通過調用SDKAPI.dll與SDK伺服器中端口為6000的SDKServer進行通信

  2).NET方式通過調用ObjectApi.dll與SDK伺服器中端口為8006的AppServer進行通信

  3)在開發工作站上,除了将RTX內建相關的連結庫檔案拷貝到運作時以外,沒有必要将RtxServerApi.ini檔案也拷貝過去,更沒必要修改其中的SDK伺服器的IP位址和端口,全部在程式中指定即可

  4)對于64位的JDK,或者.NET環境,需要特殊處理才行,具體方法見上面的使用說明

寵辱不驚,看庭前花開花落;去留無意,望天上雲卷雲舒