鍍金池/ 問答/Java  HTML/ 求解socket的一些問題和思路?

求解socket的一些問題和思路?

第一次整這個socket, socket使用還是蠻簡單,但是......,最近遇到了各種問題,整個人已經(jīng)凌亂了,不知道怎么下手了.....

服務(wù)端為node;

業(yè)務(wù)需求是這樣的:一共有A、B兩個客戶端,A端調(diào)API告訴服務(wù)端當(dāng)前進度,服務(wù)端接到后又把進度推送給B端,B端根據(jù)推送過來的進度顯示相應(yīng)的數(shù)據(jù)!下面是B端的部分代碼:

//應(yīng)為一些情況導(dǎo)致要創(chuàng)建兩個鏈接
let token = cache.getToken();
if(!token)return;
ctx.state.socketStatus = true;
if(socket_private_1 && !socket_private_1.connected){
    socket_private_1.connect();
    socket_private_2.connect();
}
if(!socket_private_1){
    socket_private_1 = io.connect(Cfg.push2 + 'service-cs',{
        path: '/socket.service',
        transports:['websocket'],
        query: 'token=' + token,
        reconnectionDelay:1000,
        forceNew: true
    });
    socket_private_2 = io.connect(Cfg.push1 + 'app-cs',{
        path: '/socket.app',
        transports:['websocket'],
        query: 'token=' + token,
        reconnectionDelay:1000,
        forceNew: true
    });
    /*
        pushEvent_1和pushEvent_2都包含了socket客戶端的基本事件(鏈接、斷開等)
    */
    events(socket_private_1,pushEvent_1,ctx,'private_1');
    events(socket_private_2,pushEvent_2,ctx,'private_2');
}

需求還是相當(dāng)簡單的,但是整個一個多星期還是各種問題,最頭痛的就是經(jīng)常斷開,也未報錯......,有時候(偶爾)服務(wù)端能看到我已離線,但是客戶端卻沒有觸發(fā)任何disconnect等事件....真的是多災(zāi)多難啊,總之最終的 、 最頭痛的 、 結(jié)果就是 -- 經(jīng)常收不到推送.....!
想問下大佬們平常使用socket都做那些設(shè)置? 主要那些東西?
然后目前有個bug,就是如果B端在某段時間斷網(wǎng)了(socket斷開了),那么就接收不到推送,但是A端流程已經(jīng)走完了.....! 目前我想的解決辦法就是 服務(wù)端在推送給B端后B端接收到了立馬返回服務(wù)端,然后服務(wù)端再告訴A端,這樣一個流程才算走完,只有B端接收到并反饋A端才能繼續(xù)往下走...???? 大佬們應(yīng)該怎么搞?

另外如果采用極光的話是否可以不用socket?

回答
編輯回答
獨白

建議采用心跳反射這樣的方法.
由客戶端發(fā)出請求.
因為按照現(xiàn)在請求的方法,當(dāng)客戶端發(fā)出請求后,
會建立臨時的鏈路,當(dāng)這個鏈路因為種種原因斷開的時候,服務(wù)器就找不到客戶端了....

2017年8月16日 17:14