Java-WebSocket 發送ping


實現主要方法:(注:這里僅執行了一次ping)

WebSocketClient client = new SocketClient(new URI("ws://192.168.0.111:9090"));
if (client.connectBlocking()) {
FramedataImpl1 resp = new FramedataImpl1();
resp.setFin(true);
resp.setOptcode(Framedata.Opcode.PING);
resp.setPayload(ByteBuffer.allocate(0));
client.getConnection().sendFrame(resp);
}

  

備注:SocketClient.java 實現了 WebSocketClient.java,並在onWebsocketPong實現了一個並不穩定的持續ping方法。如果介意,可以注釋onWebsocketPong代碼,並使用開一個獨立線程持續ping的方式來確保穩定性。

import org.java_websocket.WebSocket;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.framing.Framedata;
import org.java_websocket.framing.FramedataImpl1;
import org.java_websocket.handshake.ServerHandshake;
import java.net.URI;

public class SocketClient extends WebSocketClient {
public SocketClient(URI serverUri) {
super(serverUri);
}

@Override
public void onWebsocketPing(WebSocket conn, Framedata f) {
// 如果對方發了一個Ping過來,我立刻返回一個Pong消息
FramedataImpl1 resp = new FramedataImpl1(f);
resp.setOptcode(Framedata.Opcode.PONG);
conn.sendFrame(resp);
}

/**
* 如果我的ping發送過去后,對方有答復,則返回一個ping回去,以便實現持續做ping動作
* (缺點:萬一沒有獲取到答復,則會出現中斷ping風險)
* @param conn
* @param f
*/
@Override
public void onWebsocketPong(WebSocket conn, Framedata f) {
// 當ping生效后,會返回一個Pong信息,這里接收到Pong后等待一秒后再發送一個ping
System.out.println("接收到ping返回的pong回復");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
FramedataImpl1 resp = new FramedataImpl1(f);
resp.setOptcode(Framedata.Opcode.PING);
conn.sendFrame(resp);
}

@Override
public void onOpen(ServerHandshake handshakedata) {
System.out.println( "opened connection" );
}

@Override
public void onMessage(String message) {
System.out.println( message);
// send(message);
}

@Override
public void onClose(int code, String reason, boolean remote) {
System.out.println( "Connection closed by " + ( remote ? "remote peer" : "us" ) );
}

@Override
public void onError(Exception ex) {
ex.printStackTrace();
}
}

  

 

 
        
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM