WebSocketGo
WebSocket channel management for connect/disconnect/reconnect, for both Android and pure Java.
Install / Use
/learn @Gnepux/WebSocketGoREADME
Introduction
[Background] (https://juejin.im/post/5eff3c776fb9a07e662344ff)
WsGo is a java library, it can be used to manage the WebSocket channel.
- It helps you to connect, disconnect, auto reconnect, change ping interval.
- Support OkHttp、Java WebSocket and any other custom WebSocket library.
- Both Android and pure Java platform are supported.
- Thread safe.
Download
Gradle
implementation 'com.gnepux:wsgo:1.0.2'
// use okhttp
implementation 'com.gnepux:wsgo-okwebsocket:1.0.1'
// use java websocket
implementation 'com.gnepux:wsgo-jwebsocket:1.0.1'
Maven
<dependency>
<groupId>com.gnepux</groupId>
<artifactId>wsgo</artifactId>
<version>1.0.2</version>
<type>pom</type>
</dependency>
<!-- use okhttp -->
<dependency>
<groupId>com.gnepux</groupId>
<artifactId>wsgo-okwebsocket</artifactId>
<version>1.0.1</version>
<type>pom</type>
</dependency>
<!-- use java websocket -->
<dependency>
<groupId>com.gnepux</groupId>
<artifactId>wsgo-jwebsocket</artifactId>
<version>1.0.1</version>
<type>pom</type>
</dependency>
Usage
1. Init
WsConfig config = new WsConfig.Builder()
.debugMode(true) // true to print log
.setUrl(pushUrl) // ws url
.setHttpHeaders(headerMap) // http headers
.setConnectTimeout(10 * 1000L) // connect timeout
.setReadTimeout(10 * 1000L) // read timeout
.setWriteTimeout(10 * 1000L) // write timeout
.setPingInterval(10 * 1000L) // initial ping interval
.setWebSocket(OkWebSocket.create()) // websocket client
.setRetryStrategy(retryStrategy) // retry count and delay time strategy
.setEventListener(eventListener) // event listener
.build();
WsGo.init(config);
2. Go
// connect
WsGo.getInstance().connect();
// send text
WsGo.getInstance().send("hello from WsGo");
// disconnect
WsGo.getInstance().disconnect(1000, "close");
WsGo.getInstance().disconnectNormal("close");
// change the ping interval
WsGo.getInstance().changePingInterval(10, TimeUnit.SECONDS);
// destory WsGo instance
WsGo.getInstance().destroyInstance();
3. More about WsConfig
3.1 setWebSocket(WebSocket socket)
WsGo has already support OkHttp and Java WebSocket.
- for OkHttp (wsgo-okwebsocket)
setWebSocket(OkWebSocket.create());
- for Java WebSocket (wsgo-jwebsocket)
setWebSocket(JWebSocket.create());
If you want to use any other WebSocket client. Implementation the WebSocket interface and pass the result to ChannelCallback, then WsGo will help you manage the channel.
public interface WebSocket {
void connect(WsConfig config, ChannelCallback callback);
void reconnect(WsConfig config, ChannelCallback callback);
boolean disconnect(int code, String reason);
void changePingInterval(long interval, TimeUnit unit);
boolean send(String msg);
}
3.2 setRetryStrategy(RetryStrategy retryStrategy)
WsGo will auto reconnect if the channel disconnect abnormally. The RetryStrategy means the relationship of retry count and retry delay time.
WsGo has a DefaultRetryStrategy inner, if you want to control it by yourself, you can implementation the RetryStrategy interface.
public interface RetryStrategy {
/**
* The relationship of retry count and delay time,
* WsGo will call the method for every reconnect.
*
* @param retryCount The retry time that WsGo has retied.
* @return The delay time in milliseconds.
*/
long onRetry(long retryCount);
}
3.3 setEventListener(EventListener eventListener)
Add an EventListener of WsGo, the callback runs in a different thread to the calling thread. You need to switch thread if needed.
public interface EventListener {
void onConnect();
void onDisConnect(Throwable throwable);
void onClose(int code, String reason);
void onMessage(String text);
void onReconnect(long retryCount, long delayMillSec);
void onSend(String text, boolean success);
}
4. Data Flow
5. License
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Related Skills
canvas
341.0kCanvas Skill Display HTML content on connected OpenClaw nodes (Mac app, iOS, Android). Overview The canvas tool lets you present web content on any connected node's canvas view. Great for: -
node-connect
341.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
341.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
