成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

搭建IM服務(wù) so easy

imccl / 2702人閱讀

摘要:現(xiàn)在很多網(wǎng)站都通過服務(wù)來實(shí)現(xiàn)消息推送及數(shù)據(jù)即時(shí)同步功能,即時(shí)通訊組件逐漸成為產(chǎn)品的標(biāo)配。目前國內(nèi)有很多成熟穩(wěn)定的第三方即時(shí)通訊服務(wù)廠家,比如融云。

現(xiàn)在很多網(wǎng)站、APP都通過IM服務(wù)來實(shí)現(xiàn)消息推送及數(shù)據(jù)即時(shí)同步功能,即時(shí)通訊組件逐漸成為產(chǎn)品的標(biāo)配。目前國內(nèi)有很多成熟穩(wěn)定的第三方即時(shí)通訊服務(wù)廠家,比如:融云。使用這些專業(yè)的服務(wù)可以提高開發(fā)效率而且服務(wù)穩(wěn)定有保障。

如果自己DIY或者需要在封閉的局域網(wǎng)內(nèi)使用IM服務(wù),該怎么辦呢?下文就簡(jiǎn)單介紹一下EasyPM曾經(jīng)實(shí)踐過的自行搭建IM服務(wù)過程。

數(shù)據(jù)同步方式

實(shí)現(xiàn)數(shù)據(jù)同步,有"推"、"拉" 兩種思路,具體有以下幾種方式:

使用HTTP輪循方式

說明:定時(shí)向HTTP服務(wù)端接口(Web Service API)獲取最新消息,可結(jié)合ajax技術(shù)實(shí)現(xiàn)頁面無刷新效果,這是主動(dòng)拉取消息的機(jī)制。

優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單、可控性強(qiáng)、部署成本低

缺點(diǎn):實(shí)時(shí)性差,增加服務(wù)端負(fù)載

使用XMPP協(xié)議

說明:XMPP是基于可擴(kuò)展標(biāo)記語言(XML)的協(xié)議,它用于即時(shí)消息(IM)以及在線現(xiàn)場(chǎng)探測(cè)。它促進(jìn)在服務(wù)器之間的準(zhǔn)即時(shí)操作,其前身是Jabber,是一個(gè)開源形式組織產(chǎn)生的網(wǎng)絡(luò)即時(shí)通信協(xié)議。XMPP目前被IETF國際標(biāo)準(zhǔn)組織完成了標(biāo)準(zhǔn)化工作。

優(yōu)點(diǎn):協(xié)議成熟、強(qiáng)大、可擴(kuò)展性強(qiáng)、目前主要應(yīng)用于眾多IM系統(tǒng)

缺點(diǎn):協(xié)議比較復(fù)雜、冗余(基于XML)、費(fèi)流量

使用MQTT協(xié)議

說明:MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測(cè)傳輸)是IBM開發(fā)的一個(gè)即時(shí)通訊協(xié)議,該協(xié)議支持所有平臺(tái),是輕量級(jí)的、基于代理的“發(fā)布/訂閱”模式的消息傳輸協(xié)議

優(yōu)點(diǎn):MQTT協(xié)議簡(jiǎn)潔、可擴(kuò)展性強(qiáng)、流量開銷很小、網(wǎng)絡(luò)傳輸時(shí)間短

缺點(diǎn):還不夠成熟、實(shí)現(xiàn)較復(fù)雜

EasyPM作為一個(gè)團(tuán)隊(duì)協(xié)作應(yīng)用,消息/數(shù)據(jù)推送功能是不可或缺的。因?yàn)镸QTT比較輕量且網(wǎng)絡(luò)開銷小等特點(diǎn),我們選擇了支持MQTT協(xié)議的Apollo。

Apollo是什么?

Apollo是apache旗下的基金項(xiàng)目,它是以Apache ActiveMQ5.x為基礎(chǔ),采用全新的線程和消息調(diào)度架構(gòu)重新實(shí)現(xiàn)的消息中間件,針對(duì)多核處理器進(jìn)行了優(yōu)化處理,它的速度更快、更可靠、更易于維護(hù)。apollo與ActiveQQ一樣支持多協(xié)議:STOMP、AMQP、MQTT、Openwire、 SSL、WebSockets,本文只介紹MQTT協(xié)議的使用。

下載Apollo

進(jìn)入Apollo下載頁面 ,選擇下載合適的版本

如果操作是系統(tǒng)是Windows Vista或更高版本,則需要安裝Microsoft Visual C++ 2010 Redistributable:

64位JVM
32位JVM

創(chuàng)建Apollo實(shí)例及服務(wù)

創(chuàng)建實(shí)例
進(jìn)入E:apache-apollo-1.7之下的bin目錄,打開cmd窗口,執(zhí)行命令:apollo create D:apollo_broker,命令執(zhí)行成功后,在D盤下會(huì)有apollo_broker目錄,這便是apollo的服務(wù)實(shí)例,apollo之旅便從這里開始。

D:apollo_broker下有個(gè)bin目錄,其中有兩個(gè)文件:
apollo-broker.cmd是通過cmd命令啟動(dòng)apollo服務(wù)的
apollo-broker-service.exe,是用于創(chuàng)建window服務(wù)的

命令行啟動(dòng)服務(wù)
D:apollo_brokerin目錄下打開cmd窗口,執(zhí)行apollo-broker run命令來啟動(dòng)apollo服務(wù),

啟動(dòng)成功可以在瀏覽器中查看運(yùn)行情況,訪問地址為 http://127.0.0.1:61680 , 默認(rèn)用戶名/密碼:admin/password

創(chuàng)建windows服務(wù)
找到cmd.exe文件,點(diǎn)擊鼠標(biāo)右鍵,以管理員身份運(yùn)行,輸入創(chuàng)建windows服務(wù)命令,如下圖:

MQTT協(xié)議的應(yīng)用

MQTT協(xié)議有眾多客戶端實(shí)現(xiàn),相關(guān)客戶端請(qǐng)參考apollo官方文檔
本文采用eclipse的paho客戶端實(shí)現(xiàn)

web端接收消息介紹

將 javascript客戶端項(xiàng)目下載下來,并在其項(xiàng)目根目錄下執(zhí)行mvn命令,進(jìn)行編譯,生成target目錄,其下生成mqttws31.js、mqttws31-min.js兩個(gè)js文件,將其拷貝到自己項(xiàng)目相關(guān)目錄下,并在頁面中引用,即可實(shí)現(xiàn)javascript客戶端的消息訂閱和發(fā)布,demo代碼如下:

var client = new Paho.MQTT.Client(location.hostname, 61623,"/", "clientId"); 
/* 61623是ws連接的默認(rèn)端口,可以在apollo中間件中進(jìn)行配置
(關(guān)于apollo的配置請(qǐng)參考:
 http://activemq.apache.org/apollo/documentation/user-manual.html
) */
// set callback handlers 
client.onConnectionLost = onConnectionLost; 
client.onMessageArrived = onMessageArrived; 
// connect the client 
client.connect({userName:"admin",password:"password",onSuccess:onConnect}); 
// called when the client connects 
function onConnect() { // 連接成功后的處理 
        // Once a connection has been made, make a subscription and send a message. 
        console.log("onConnect"); 
        client.subscribe("/topic/event"); // 訂閱消息的主題 
        var message = new Paho.MQTT.Message("Hello,this is a test"); 
        message.destinationName = "/topic/event"; 
        client.send(message); // 發(fā)送消息 
} 
// called when the client loses its connection 
function onConnectionLost(responseObject) { // 連接丟失后的處理 
        if (responseObject.errorCode !== 0) { 
                console.log("onConnectionLost:"+responseObject.errorMessage); 
        } 
} 
// called when a message arrives 
function onMessageArrived(message) { // 消息接收成功后的處理 
        console.log("onMessageArrived:"+message.payloadString); 
}
服務(wù)端消息發(fā)送介紹

paho java客戶端目前只支持J2SE和安卓,提供源碼下載和maven庫。
我們采用maven庫,其地址如下:
Official Releases
Nightly Snapshots
maven dependency配置:

 
        org.eclipse.paho 
        org.eclipse.paho.client.mqttv3 
        1.0.1 

java實(shí)現(xiàn)代碼:

        String topic        = "MQTT Examples"; 
        String content      = "Message from MqttPublishSample";
        int qos             = 2;
        String broker       = "tcp://127.0.0.1:61613";
        String clientId     = "JavaSample";
        MemoryPersistence persistence = new MemoryPersistence();
        try {
            MqttClient sampleClient = new MqttClient(broker, clientId, persistence);
            MqttConnectOptions connOpts = new MqttConnectOptions();
            connOpts.setCleanSession(true);
            System.out.println("Connecting to broker: "+broker);
            sampleClient.connect(connOpts);
            System.out.println("Connected");
            System.out.println("Publishing message: "+content);
            MqttMessage message = new MqttMessage(content.getBytes());
            message.setQos(qos);
            sampleClient.publish(topic, message);
            System.out.println("Message published");
            sampleClient.disconnect();
            System.out.println("Disconnected");
            System.exit(0);
        } catch(MqttException me) {
            System.out.println("reason "+me.getReasonCode());
            System.out.println("msg "+me.getMessage());
            System.out.println("loc "+me.getLocalizedMessage());
            System.out.println("cause "+me.getCause());
            System.out.println("excep "+me);
            me.printStackTrace();
        }
小結(jié)

至此,MQTT協(xié)議已部署完畢,java端可以發(fā)布消息,而javascript端則可以訂閱并接收到j(luò)ava端發(fā)布的信息。在搭建的過程中,可以參考以下資源:

MQTT

ActiveMQ5

Apollo官方文檔

eclipse paho

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65745.html

相關(guān)文章

  • 【爬蟲系列之一】爬蟲開發(fā)環(huán)境的搭建

    摘要:當(dāng)前分為版本,以及版本,這兩個(gè)版本相互直接是不兼容的,但是當(dāng)前世面的主流或者程序還是偏多,所以我這邊主要是版本為基礎(chǔ),確切地說,是版本。下面來說說如何安裝開發(fā)環(huán)境以及開發(fā)工具一環(huán)境的安裝上安裝如果你正在使用,系統(tǒng)是,系統(tǒng)自帶了。 當(dāng)前python分為2.x版本,以及3.x版本,這兩個(gè)版本相互直接是不兼容的,但是當(dāng)前世面的主流web或者程序還是2.x偏多,所以我這邊主要是2.x版本為基礎(chǔ)...

    Jochen 評(píng)論0 收藏0
  • so easy! apache開啟 gzip 壓縮

    摘要:開啟壓縮這里我使用的是打開安裝目錄,找到目錄,用記事本打開文件。 apache開啟 gzip 壓縮 這里我使用的是Apache2.4.17 打開apache安裝目錄,找到conf目錄,用記事本打開httpd.conf 文件。 ctrl+f 查找 去掉 #LoadModule headers_module modules/mod_headers.so 前面的注釋 # 去掉 #Load...

    MonoLog 評(píng)論0 收藏0
  • Linux下安裝python-2.7

    摘要:優(yōu)化編寫一鍵安裝的腳本由于的系統(tǒng)默認(rèn)都是,如果服務(wù)器需要用環(huán)境的話每臺(tái)都得手動(dòng)操作升級(jí),工作量比較大,編寫腳本提升效率。 安裝依賴的庫 yum -y install python-devel openssl openssl-devel gcc sqlite sqlite-devel mysql-devel libxml2-devel libxslt-devel Python =====...

    darryrzhong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<