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

roh*_*u19 16 php android angularjs laravel-4

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

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

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

  2. Single App 2 FrontEnds:拥有一个Laravel应用程序和2个前端.Play商店将有单独的应用程序,但单个服务器应用程序.我怎样才能做到这一点?

这种方法有更好的解决方案吗?优步如何做同样的事情?

Dan*_*nny 7

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

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

dependencies {
    ....
    compile 'com.pubnub:pubnub:3.7.4'
    //'com.pubnub:pubnub-android-debug:3.7.+' For the debug version
}
Run Code Online (Sandbox Code Playgroud)

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());
}
Run Code Online (Sandbox Code Playgroud)

如果您正在寻找Uber如何做到这一点的想法,请查看教程" The PubNub Connected Car Solution Kit "

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


小智 5

我认为一个好的解决方案是将所有业务逻辑放入一个可通过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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

如果您使用Laravel构建前端应用程序,API将成为前端系统使用的自己的URL.为了做这个请求,我喜欢使用Zend\Http\Client,这非常舒服.