Android 实现本地HttpServer搭建,使用AndroidAsync三方库

      公司要做一个h5的游戏嵌入到安卓中用webview展示,但是用请求网络的地址在webview上展示会很卡,因为我这设备是终端不是手机这种,所以性能没有手机好,相对就会很卡,然后公司让做成本地的,我就开始找库,看到AndroidAsync这个库,本身自己对服务器方面的也不是很懂,所以问了一下前端怎么搭建这种静态服务器的。

     了解流程后也研究了一下子,算是明白了一点,下面是代码:

private void createHttpServer(String url) {
        AsyncHttpServer server = new AsyncHttpServer();
        try {
            Log.i("responsedata", "要请求的地址:" + url);
            //创建HttpServer时指定请求的正则标签时如果指写/game/这种只会请求一次不会在进行页面中其他的请求,导致页面其他文件不能加载
            //所以在创建正则标签时标签后面一定要加  .*? 例如:/game/.*? 通配符来,用于检索game下的所有文件,可以相应Html对game文件下的其他请求,不加的话只会响应一次请求,其他就不会响应了,页面就展现不出来
            //server.get("/game/.*?", new HttpServerRequestCallback() {
            server.get(url, new HttpServerRequestCallback() {
                @Override
                public void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) {
                 //request.getMatcher() 该方法是在返回指定html页面后,然后在请求的path才会有值,就是说指定的html页面展示了,页面中发起请求的地址。
                    try {

                        String requestPath = request.getPath();
                       //第一次发起请求的时候我直接返回游戏主页的html文件,然后页面在发起其他请求的时候在返回相对应路径的文件就可以了
                        if (requestPath.equals("/game/")) {
                            String pathTemp = requestPath + "index.html";
                            sendAssignFile(response, pathTemp);
                        } else {
                            String path = request.getMatcher().replaceAll("");
                            File filePath = new File("/game/" + path);
                            sendAssignFile(response, filePath.getAbsolutePath());
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                private void sendAssignFile(AsyncHttpServerResponse response, String pathTemp) throws IOException {
                    File file = new File(absolutePath, pathTemp);
                    FileInputStream stream = new FileInputStream(file);
                    response.setContentType(AsyncHttpServer.getContentType(pathTemp));
                    response.sendStream(stream, stream.available());
                }
            });
            server.listen(5050);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

其实最主要的就是怎么让当前服务器一直停留接收第一次之后的其他请求,因为这个刚开始不明白也查了很多东西才明白,就是这个.*?这中通配符。然后就根据请求返回对应的数据了,之后webview响应速度那是嗖嗖的了。我的游戏是可以更新的,所以还要单独下载这个游戏,然后解压,在布置就可以了。

你可能感兴趣的:(Android,学习,httpserver)