• Java基础知识强化之网络编程笔记24:Android网络通信之 AndroidAsync(基于nio的异步通信库)


    1. AndroidAsync  

      AndroidAsync 是一个基于nio的异步socket ,http(客户端服务器端),websocket,socket.io库,AndroidAsync 是一个底层的网络协议库,如果你想要一个容易使用,高级的,http请求库,请使用Ion(它是基于AndroidAsync 的),正常来说开发者更倾向于使用  Ion。

    如果你需要一个未被封装的Android的raw Socket, HTTP client/server, WebSocket, and Socket.IO, AndroidAsync 正适合你。

    2. AndroidAsync 的特性

    • 基于NIO,一个线程,回调驱动,高效
    •  所有的操作返回一个Future,而且可以取消
    • All operations return a Future that can be cancelled
    • Socket client + socket server
    • HTTP client + server
    • WebSocket client + server
    • Socket.IO 客户端

    3. AndroidAsync 的下载

    <dependency>

        <groupId>com.koushikdutta.async</groupId>

        <artifactId>androidasync</artifactId>

        <version>(insert latest version)</version>

    </dependency>

    4. AndroidAsync 的使用

    (1)下载一个字符串

     1 // url is the URL to download.
     2 AsyncHttpClient.getDefaultInstance().getString(url, new AsyncHttpClient.StringCallback() {
     3     // Callback is invoked with any exceptions/errors, and the result, if available.
     4     @Override
     5     public void onCompleted(Exception e, AsyncHttpResponse response, String result) {
     6         if (e != null) {
     7             e.printStackTrace();
     8             return;
     9         }
    10         System.out.println("I got a string: " + result);
    11     }
    12 });

    (2)下载一个Json

     1 // url is the URL to download.
     2 AsyncHttpClient.getDefaultInstance().getJSONObject(url, new AsyncHttpClient.JSONObjectCallback() {
     3     // Callback is invoked with any exceptions/errors, and the result, if available.
     4     @Override
     5     public void onCompleted(Exception e, AsyncHttpResponse response, JSONObject result) {
     6         if (e != null) {
     7             e.printStackTrace();
     8             return;
     9         }
    10         System.out.println("I got a JSONObject: " + result);
    11     }
    12 });

    (3)下载一个文件

     1 AsyncHttpClient.getDefaultInstance().getFile(url, filename, new AsyncHttpClient.FileCallback() {
     2     @Override
     3     public void onCompleted(Exception e, AsyncHttpResponse response, File result) {
     4         if (e != null) {
     5             e.printStackTrace();
     6             return;
     7         }
     8         System.out.println("my file is available at: " + result.getAbsolutePath());
     9     }
    10 });

    (4)支持缓存

    1 // arguments are the http client, the directory to store cache files, and the size of the cache in bytes
    2 ResponseCacheMiddleware.addCache(AsyncHttpClient.getDefaultInstance(),
    3                                   getFileStreamPath("asynccache"),
    4                                   1024 * 1024 * 10);

    (5)创建一个Socket

     1 AsyncHttpClient.getDefaultInstance().websocket(get, "my-protocol", new WebSocketConnectCallback() {
     2     @Override
     3     public void onCompleted(Exception ex, WebSocket webSocket) {
     4         if (ex != null) {
     5             ex.printStackTrace();
     6             return;
     7         }
     8         webSocket.send("a string");
     9         webSocket.send(new byte[10]);
    10         webSocket.setStringCallback(new StringCallback() {
    11             public void onStringAvailable(String s) {
    12                 System.out.println("I got a string: " + s);
    13             }
    14         });
    15         webSocket.setDataCallback(new DataCallback() {
    16             public void onDataAvailable(ByteBufferList byteBufferList) {
    17                 System.out.println("I got some bytes!");
    18                 // note that this data has been read
    19                 byteBufferList.recycle();
    20             }
    21         });
    22     }
    23 });

    (6)支持socket io

     1 SocketIOClient.connect(AsyncHttpClient.getDefaultInstance(), "http://192.168.1.2:3000", new ConnectCallback() {
     2     @Override
     3     public void onConnectCompleted(Exception ex, SocketIOClient client) {
     4         if (ex != null) {
     5             ex.printStackTrace();
     6             return;
     7         }
     8         client.setStringCallback(new StringCallback() {
     9             @Override
    10             public void onString(String string) {
    11                 System.out.println(string);
    12             }
    13         });
    14         client.on("someEvent", new EventCallback() {
    15             @Override
    16             public void onEvent(JSONArray argument, Acknowledge acknowledge) {
    17                 System.out.println("args: " + arguments.toString());
    18             }
    19         });
    20         client.setJSONCallback(new JSONCallback() {
    21             @Override
    22             public void onJSON(JSONObject json) {
    23                 System.out.println("json: " + json.toString());
    24             }
    25         });
    26     }
    27 });

    (7)提交表单

     1 AsyncHttpPost post = new AsyncHttpPost("http://myservercom/postform.html");
     2 MultipartFormDataBody body = new MultipartFormDataBody();
     3 body.addFilePart("my-file", new File("/path/to/file.txt");
     4 body.addStringPart("foo", "bar");
     5 post.setBody(body);
     6 AsyncHttpClient.getDefaultInstance().execute(post, new StringCallback() {
     7     @Override
     8     public void onCompleted(Exception e, AsyncHttpResponse source, String result) {
     9         if (e != null) {
    10             ex.printStackTrace();
    11             return;
    12         }
    13         System.out.println("Server says: " + result);
    14     }
    15 });



    (8)创建一个http server

     1 AsyncHttpServer server = new AsyncHttpServer();
     2 List<WebSocket> _sockets = new ArrayList<WebSocket>();
     3 server.get("/", new HttpServerRequestCallback() {
     4     @Override
     5     public void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) {
     6         response.send("Hello!!!");
     7     }
     8 });
     9 // listen on port 5000
    10 server.listen(5000);
    11 // browsing http://localhost:5000 will return Hello!!!

    接着,创建一个websocket  server

     1 server.websocket("/live", new WebSocketRequestCallback() {
     2     @Override
     3     public void onConnected(final WebSocket webSocket, AsyncHttpServerRequest request) {
     4         _sockets.add(webSocket);
     5         //Use this to clean up any references to your websocket
     6         websocket.setClosedCallback(new CompletedCallback() {
     7             @Override
     8             public void onCompleted(Exception ex) {
     9                 try {
    10                     if (ex != null)
    11                         Log.e("WebSocket", "Error");
    12                 } finally {
    13                     _sockets.remove(webSocket);
    14                 }
    15             }
    16         });
    17         webSocket.setStringCallback(new StringCallback() {
    18             @Override
    19             public void onStringAvailable(String s) {
    20                 if ("Hello Server".equals(s))
    21                     webSocket.send("Welcome Client!");
    22             }
    23         });
    24     }
    25 });
    26 //..Sometime later, broadcast!
    27 for (WebSocket socket : _sockets)
    28     socket.send("Fireball!");

    (9)支持Future

    1 Future<String> string = client.getString("http://foo.com/hello.txt");
    2 // this will block, and may also throw if there was an error!
    3 String value = string.get();

    5. AndroidAsync的下载

    开源地址:https://github.com/koush/AndroidAsync

  • 相关阅读:
    jQuery笔记(1)
    [bzoj 1878][SDOI2009]HH的项链
    [bzoj 1968][Ahoi2005]COMMON 约数研究
    [bzoj 1899][ZJOI2004]lunch 午餐
    [bzoj 1090][SCOI2003]字符串折叠
    CodeForces 1029E div3
    [bzoj 1270][BeijingWc2008]雷涛的小猫
    [bzoj 1260][CQOI 2007]涂色paint
    [AtCoder ARC101D/ABC107D] Median of Medians
    [luogu 1070]道路游戏(NOIP2009T4)
  • 原文地址:https://www.cnblogs.com/hebao0514/p/5195848.html
Copyright © 2020-2023  润新知