Laravel 消费者和提供商应用程序架构

2022-08-31 01:07:19

我正在使用Laravel构建一个帮助用户找到服务提供商的应用程序。将有2个应用程序,如Uber,1个用于用户,1个用于提供商。用户将发出请求,并根据请求,所选提供程序将收到通知。就像优步一样。

问题是,我应该如何设计这个。我想出了:

  1. 2个应用程序:拥有2个具有通用数据库的Laravel应用程序。但是,当用户生成请求时,如何通知提供商?只有数据库会更改,那么我如何告诉提供程序应用用户应用生成了请求?

  2. 单个应用程序 2 前端:具有单个 Laravel 应用程序和 2 个前端。Play商店中将有单独的应用程序,但只有一个服务器应用程序。我该怎么做?

这种方法有更好的解决方案吗?优步是如何做到的?


答案 1

我建议你应该使用像PubNub这样的给定服务(参见演示)。

这样你就可以保存你的服务器开发,还有一个Android示例,你可以简单地在你的APP中使用它,如下所示:

dependencies {
    ....
    compile 'com.pubnub:pubnub:3.7.4'
    //'com.pubnub:pubnub-android-debug:3.7.+' For the debug version
}

import com.pubnub.api.*;
import org.json.*;

Pubnub pubnub = new Pubnub("demo", "demo");

try {
  pubnub.subscribe("my_channel", new Callback() {
      @Override
      public void connectCallback(String channel, Object message) {
          pubnub.publish("my_channel", "Hello from the PubNub Java SDK", new Callback() {});
      }

      @Override
      public void disconnectCallback(String channel, Object message) {
          System.out.println("SUBSCRIBE : DISCONNECT on channel:" + channel
                     + " : " + message.getClass() + " : "
                     + message.toString());
      }

      public void reconnectCallback(String channel, Object message) {
          System.out.println("SUBSCRIBE : RECONNECT on channel:" + channel
                     + " : " + message.getClass() + " : "
                     + message.toString());
      }

      @Override
      public void successCallback(String channel, Object message) {
          System.out.println("SUBSCRIBE : " + channel + " : "
                     + message.getClass() + " : " + message.toString());
      }

      @Override
      public void errorCallback(String channel, PubnubError error) {
          System.out.println("SUBSCRIBE : ERROR on channel " + channel
                     + " : " + error.toString());
      }
    }
  );
} catch (PubnubException e) {
  System.out.println(e.toString());
}

如果您正在寻找Uber如何做到这一点的想法,请查看教程“PubNub联网汽车解决方案套件”"

所以我希望我能回答,Uber是如何做到这一点的,以及如何让它变得更好:-)


答案 2

我认为一个好的解决方案是将所有业务逻辑放入一个可以通过REST访问的Laravel应用程序中。因此,您不必更新文件两次。

“真正的”应用程序仅作为中间层工作并使用此API。

例如,在前面,您可以设置Angular Apps。如果使用nginx,则可以为每个域定义不同的位置。这样,所有以“api”开头的请求都将路由到您的Laravel应用程序。其余的将路由到静态的 Angular 应用程序。

{
    listen 80;
    server_name customer.com;

    location /api{
        root /var/www/api;
    }

    location / {
        root /var/www/static/customer;
    }
}

{
    listen 80;
    server_name internalarea.com;

    location /api{
        root /var/www/api;
    }

    location / {
        root /var/www/static/restricted;
    }
}

https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms

如果您也使用Laravel构建前端应用程序,则API将成为前端系统使用自己的URL。对于这个请求,我喜欢使用Zend\Http\Client,这很舒服。


推荐