Android设备一般是作为客户端使用,但是最近一个项目需要用android开发板作为服务器和手机端通信,因此花了点时间研究了下如何在android上运行http server。
实际上这是有开源解决方案的,叫做AndroidAsync,作者是Koushik Dutta,他的另一个开源项目是大名鼎鼎的ION,这是一个异步网络图片加载库。但是AndroidAsync几乎没什么文档,因此实际使用中遇到了一些问题,记录下了方便其他有需要的人参考。
AndroidAsync中提供了一个AsyncHttpServer类处理网络请求,而我们需要实现HttpServerRequestCallback接口执行实际的业务逻辑,实际上该接口只有一个onRequest()方法。首先我们要为GET/POST方法注册callback,然后开始监听端口:
public class ArtemisHttpServer implements HttpServerRequestCallback {
public static int PORT_DEFALT = 6789;
AsyncHttpServer mServer = new AsyncHttpServer();
public void start() {
Log.d(TAG, "Starting http server...");
mServer.get("[\\d\\D]*", this);
mServer.post("[\\d\\D]*", this);
mServer.listen(PORT_DEFALT);
}
public void stop() {
Log.d(TAG, "Stopping http server...");
mServer.stop();
}
}