Laravel Consumer and Provider App架构

时间:2015-07-07 06:44:23

标签: php android angularjs laravel-4

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

问题是,我该如何设计呢。我想出了什么:

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

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

  3. 这种方法有更好的解决方案吗?优步如何做到这一点?

5 个答案:

答案 0 :(得分:7)

我建议你应该使用像PubNub (see Demos)这样的服务。

这样你可以保存你的服务器开发,还有一个Android-Example 您可以在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如何做到这一点的想法,请查看教程" The PubNub Connected Car Solution Kit"

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

答案 1 :(得分:5)

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

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

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

{
    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,这非常舒服。

答案 2 :(得分:3)

如果您想为normar用户和提供商开发应用程序。

然后我会建议你 开发2个seprate应用程序和单个服务器(永远不会为任何应用程序创建不同的服务器)

或者您可以在注册时指定用户类型

答案 3 :(得分:2)

您应该开发一个通用API和两个应用程序,如Uber。或者你可以为eBay这样的供应商和买家构建一个应用程序。您应该在服务器代码上使用侦听器,因此无论何时触发事件,您都应该发送此类通知。看看听众的设计模式。

答案 4 :(得分:0)

由于存在单个(数据库),因此最好使用单个后端应用程序。当用户添加新请求时,您可以将推送通知发送给提供商(Android应用程序)。