搭建Android服务器,是有一定需求的。当需要一定数据传输时,如果额外搭建服务器,会造成一定的开发成本问题和数据延迟问题。这时如果搭建一个Android平台服务器,可以很好的解决此问题。
这里主要介绍一下如何搭建Android的服务器实现HTTP和WebSocket。其中介绍AndServe搭建HTTP服务器和Java-WebSocket搭建WebSocket服务器端。
官方文档:https://yanzhenjie.com/AndServer/,使用介绍和举例非常丰富,开发时很有帮助。
官方代码:https://github.com/yanzhenjie/AndServer,可以阅读源码,demo也很简洁丰富。
AndServer是Android平台的Web Server和Web Framework。 它基于编译时注解提供了类似SpringMVC的注解和功能,如果您熟悉SpringMVC,则可以非常快速地掌握它。
implementation 'com.yanzhenjie.andserver:api:2.0.5'
annotationProcessor 'com.yanzhenjie.andserver:processor:2.0.5'
Server mServer = AndServer.serverBuilder(this)
.inetAddress(NetUtils.getLocalIPAddress()) //指定Ip地址
.port(PORT)
.timeout(10, TimeUnit.SECONDS)
.listener(new Server.ServerListener() {
@Override
public void onStarted() {
}
@Override
public void onStopped() {
}
@Override
public void onException(Exception e) {
}
})
.build();
private void startServer() {
if (!mServer.isRunning()) {
mServer.startup(); //启动
}
}
private void stopServer() {
mServer.shutdown(); //退出
}
注意,GitHub上作者有丰富举例,可以更好学习,我简单写一个。
package com.peanut.myapplication.http.component;
import android.content.Context;
import com.yanzhenjie.andserver.annotation.Config;
import com.yanzhenjie.andserver.framework.config.Multipart;
import com.yanzhenjie.andserver.framework.config.WebConfig;
import com.yanzhenjie.andserver.framework.website.AssetsWebsite;
import java.io.File;
@Config
public class AppConfig implements WebConfig {
@Override
public void onConfig(Context context, Delegate delegate) {
delegate.addWebsite(new AssetsWebsite(context, "/web"));
delegate.setMultipart(Multipart.newBuilder()
.allFileMaxSize(1024 * 1024 * 20) // 20M
.fileMaxSize(1024 * 1024 * 5) // 5M
.maxInMemorySize(1024 * 10) // 1024 * 10 bytes
.uploadTempDir(new File(context.getCacheDir(), "_server_upload_cache_"))
.build());
}
}
package com.peanut.myapplication.http.controller;
import com.yanzhenjie.andserver.annotation.Controller;
import com.yanzhenjie.andserver.annotation.GetMapping;
@Controller
public class PageController {
@GetMapping(path = "/")
public String index() {
return "forward:/index.html"; //访问项目路径下网页
}
}
implementation "org.java-websocket:Java-WebSocket:1.3.6"
继承WebSocketServer,传入端口
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
import java.net.InetSocketAddress;
public class TestServer extends WebSocketServer {
private TestServer serverSocket;
private static final String TAG = "TestServer";
public TestServer(int port) {
super(new InetSocketAddress(port));
}
@Override
public void onOpen(WebSocket conn, ClientHandshake handshake) {
//开始连接
}
@Override
public void onClose(WebSocket conn, int code, String reason, boolean remote) {
//服务器关闭
}
@Override
public void onMessage(WebSocket conn, String message) {
//接收消息,做逻辑处理,这里我直接重新返回消息
sendMessage(conn, message);
}
@Override
public void onError(WebSocket conn, Exception ex) {
//异常
}
@Override
public void onStart() {
}
}
public void start(int port) {
serverSocket = new TestServer(port);
serverSocket.start();
}
public void stop() {
serverSocket.stop();
}
public void sendMessage(WebSocket socket, String message) {
socket.send(message);
}
在线测试工具.