看你具體的需求與服務(wù)器能提供的接口類型了,如果是Http的接口,在Wi-fi或者移動(dòng)網(wǎng)絡(luò)中APN類型是NET(CMNET,UNINET,CTNET等)類型時(shí),可以直接用keep-alive保持長連接,如果是移動(dòng)網(wǎng)絡(luò)APN類型是WAP類型,長連接就無法保持了,如果只是處理定時(shí)心跳,建議定時(shí)去啟動(dòng)一個(gè)Http連接完成心跳;如果需要處理推送業(yè)務(wù),那么可以用XMPP協(xié)議,這個(gè)需要服務(wù)端提供相應(yīng)的服務(wù),再有就是如果有那種需要頻繁刷新的數(shù)據(jù)業(yè)務(wù),websocket也可以考慮
資興網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),資興網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為資興上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個(gè)售后服務(wù)好的資興做網(wǎng)站的公司定做!
[img]在遠(yuǎn)標(biāo)實(shí)現(xiàn)過:socket模擬網(wǎng)頁的報(bào)文連接某個(gè)網(wǎng)站,創(chuàng)建tcp的socket后,當(dāng)我socket.connect后,如果在5到7秒鐘不socket.send,那么這個(gè)鏈接就失效了。 請問如何長時(shí)間的保持這個(gè)鏈接
這是在服務(wù)器端的設(shè)置的,客戶端沒法設(shè)置,可以發(fā)送心跳包。
socket.connect后,每3-4秒用socket.send發(fā)送一字節(jié)數(shù)據(jù)(內(nèi)容隨便),然后觀查這個(gè)連接是否保持。
lientSocket=serverSocket.accept();
OutputStream os = clientSocket.getOutputStream();
ObjectOutputStream oos=new ObjectOutputStream(os);
oos.writeObject(al);
oos.flush();
oos.close()//socket會關(guān)閉
實(shí)現(xiàn):
長連接的維持,是要客戶端程序,定時(shí)向服務(wù)端程序,發(fā)送一個(gè)維持連接包的。
如果,長時(shí)間未發(fā)送維持連接包,服務(wù)端程序?qū)嚅_連接。
客戶端:
通過持有Client對象,可以隨時(shí)(使用sendObject方法)發(fā)送Object給服務(wù)端。
如果keepAliveDelay毫秒(程序中是2秒)內(nèi)未發(fā)送任何數(shù)據(jù),則,自動(dòng)發(fā)送一個(gè)KeepAlive對象給服務(wù)端,
用于維持連接。
由于,我們向服務(wù)端,可以發(fā)送很多不同的對象,服務(wù)端也可以返回不同的對象。
所以,對于返回對象的處理,要編寫具體的ObjectAction實(shí)現(xiàn)類進(jìn)行處理。
通過Client.addActionMap方法進(jìn)行添加。這樣,程序會回調(diào)處理。
服務(wù)端:
由于客戶端會定時(shí)(keepAliveDelay毫秒)發(fā)送維持連接的信息過來,所以,服務(wù)端要有一個(gè)檢測機(jī)制。
即當(dāng)服務(wù)端receiveTimeDelay毫秒(程序中是3秒)內(nèi)未接收任何數(shù)據(jù),則,自動(dòng)斷開與客戶端的連接。
ActionMapping的原理與客戶端相似(相同)。
通過添加相應(yīng)的ObjectAction實(shí)現(xiàn)類,可以實(shí)現(xiàn)不同對象的響應(yīng)、應(yīng)答過程。
所謂長連接,指在一個(gè)連接上可以連續(xù)發(fā)送多個(gè)數(shù)據(jù)包,然后斷開連接,在連接保持期間,如果沒有數(shù)據(jù)包發(fā)送,需要雙方發(fā)鏈路檢測包。短連接是指通訊雙方有數(shù)據(jù)交互時(shí),就建立一個(gè)連接,數(shù)據(jù)發(fā)送完成后,則斷開此連接,即每次連接只完成一項(xiàng)業(yè)務(wù)的發(fā)送.