Android搭建HTTP和WebSocket的服务器端

Android服务器搭建

  • Android服务器搭建
    • AndServer搭建HTTP服务器
      • 配置依赖
      • 创建服务器
      • 举例展示
    • Java-WebSocket搭建WebSocket
      • 配置依赖
      • 创建服务器
      • 举例展示

Android服务器搭建

搭建Android服务器,是有一定需求的。当需要一定数据传输时,如果额外搭建服务器,会造成一定的开发成本问题和数据延迟问题。这时如果搭建一个Android平台服务器,可以很好的解决此问题。

这里主要介绍一下如何搭建Android的服务器实现HTTP和WebSocket。其中介绍AndServe搭建HTTP服务器和Java-WebSocket搭建WebSocket服务器端。

AndServer搭建HTTP服务器

官方文档: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'

创建服务器

  1. 创建服务器
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();
  1. 启动服务器
  private void startServer() {
    if (!mServer.isRunning()) {
      mServer.startup();	//启动
    }
  }
  1. 退出服务器
  private void stopServer() {
    mServer.shutdown();	//退出
  }

举例展示

注意,GitHub上作者有丰富举例,可以更好学习,我简单写一个。

  1. 配置网址路径等等
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());
  }
}

Android搭建HTTP和WebSocket的服务器端_第1张图片
2. 访问登录界面

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";	//访问项目路径下网页
  }
}

Java-WebSocket搭建WebSocket

配置依赖

implementation "org.java-websocket:Java-WebSocket:1.3.6"

创建服务器

  1. 创建服务器

继承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() {

    }

}
  1. 启动服务器
    public void start(int port) {
        serverSocket = new TestServer(port);
        serverSocket.start();
    }
  1. 停止服务器
    public void stop() {
        serverSocket.stop();
    }
  1. 发送消息
    public void sendMessage(WebSocket socket, String message) {
        socket.send(message);
    }

举例展示

在线测试工具.

Android搭建HTTP和WebSocket的服务器端_第2张图片

你可能感兴趣的:(开发遇坑记录)