我想在我的Android应用程序中添加一个服务,该应用程序在后台运行,持有WebSocket连接(可能需要几个小时甚至几天),并定期将一些数据发送到服务器.
现在似乎有一堆用于Java的WebSocket库,我不确定应该使用哪一个:
来自GitHub的 TooTallNate/Java-WebSocket描述:用100%Java编写的准系统WebSocket客户端和服务器实现.http://java-websocket.org/ - 这是我在google搜索"android websocket"的第一个结果中链接的.但是,它有很多未解决的问题,尤其是关于SSL连接的问题,目前似乎没有积极维护.
来自GitHub的 koush/AndroidAsync描述:用于android的异步套接字,http(客户端+服务器),websocket和socket.io库.基于nio,而不是线程. - 许多公开问题,但似乎是维持/工作的活动.
项目Tyrus 来自网站的描述:JSR 356:用于WebSocket的Java API - 参考实现 - 这是由Oracle完成的.不确定它是否适用于Android.
来自网站的 Jetty WebSocket客户端API信息:Jetty还提供了一个Jetty WebSocket客户端库,可以更轻松地与WebSocket服务器进行通信. - 再次:不确定它是否适用于Android.
codebutler/android-websockets 来自GitHub的描述: Android的裸网最小websockets(hybi13/RFC)客户端 - 这个用于 schwiz/android-websocket-example,这是StackOverflow问题的接受答案"如何制作Android设备是否在没有唤醒锁定的情况下保持与Internet的TCP连接? "
来自GitHub的 Atmosphere/wasync描述:带有回退的WebSockets传输Node.js,Android和Java的客户端库 http://async-io.org
TakahikoKawasaki/nv-websocket-client 来自GitHub的描述:Java中的高质量WebSocket客户端实现.
square/okhttp
来自GitHub的描述:适用于Android和Java应用程序的HTTP + SPDY客户端.http://square.github.io/okhttp/
-它有一个Websocket模块.正如 scorpiodawg所提到的,OkHttp自3.5版以来就内置了websocket支持.
来自GitHub的 firebase/TubeSock说明:用Java实现的WebSocket客户端库
Autobahn | Android(GitHub) 网站描述:Autobahn | Android是一个用于Java/Android的开源网络库,由Autobahn项目创建,实现WebSocket协议和Web应用程序消息传递协议(WAMP),用于创建本机移动WebSocket/WAMP客户端.- cloudsurfin指出,这不支持wss.
此外,Android …
我正在使用Koush的AndroidAsync作为WebSocket客户端.我的代码遵循https://github.com/koush/AndroidAsync中的示例并且有效.(以下复制的例子.)
我需要我的应用程序在启动时打开websocket,但是,我需要处理一些问题:
A)我需要允许用户更改websocket服务器的地址.在这种情况下,我需要关闭现有的websocket(可能已经失败)并打开一个websocket到新服务器.
B)服务器可能已关闭或不可用.在这种情况下,我想将此报告回活动.目前它只是默默地失败.
所以按重要性排序:
如果在某处记录,请告诉我.
以下复制的网站示例代码:
AsyncHttpClient.getDefaultInstance().websocket(get,"my-protocol",new WebSocketConnectCallback(){
@Override
public void onCompleted(Exception ex,WebSocket webSocket){
if(ex!=null){
ex.printStackTrace();
return;
}
webSocket.send("a string");
webSocket.send(new byte[10]);
webSocket.setStringCallback(new StringCallback(){
public void onStringAvailable(String s){
System.out.println("I got a string: "+s);
}
});
webSocket.setDataCallback(new DataCallback(){
public void onDataAvailable(ByteBufferList byteBufferList){
System.out.println("I got some bytes!");
// note that this data has been read
byteBufferList.recycle();
}
});
}
});
Run Code Online (Sandbox Code Playgroud)