我没有在软件架构中进行过实验,如果我的问题看起来很奇怪或者只是愚蠢,那么请提前抱歉。 (或者如果它是错误的论坛......)
我们有一个与Laravel框架配合良好的网络服务器,但我们需要进行高级数学功能。我们还有一个用C语言编写的程序(在另一个更强大的机器上)可以管理这种计算。
我想知道如何将数据从laravel控制器传递给该程序。是否有任何协议应该受到青睐?
或者我们应该在C程序中创建一个API并从Laravel进行调用吗?
这种情况似乎是最佳选择?
答案 0 :(得分:0)
注意事项:
运行C程序来执行任务是PHP在与操作系统交互时实际执行的操作,因此这实际上是一种更常见的使用方案。
然而,这里的主要问题来自C程序远程定位的事实。您需要某种Web服务器来向其发送请求并检索响应。
使用CGI(以及扩展名FastCGI)实际上可以直接调用程序,但这就是问题所在。就个人而言,我发现整个世界可以直接调用托管在我服务器上的C程序有点令人不安。如果你想保护程序而不需要任何包装器,那么你需要修改程序本身以基本上充当API。虽然这并非闻所未闻,但考虑到已经有可用于构建API的解决方案,它将使您的生活更加艰难。
另外需要注意的是,在现代设置中,PHP本身实际上是在FastCGI上运行,所以它特别快,特别是与OpCache配合使用时。我提到这个,以防速度是避免制作PHP API的问题。
因此建议使用托管在远程计算机上的Laravel作为API。
以下是示例应用的工作原理:
<强> api.php 强>
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.d("Chex ", "Permission on request result came back with " + grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
默认情况下,Laravel会对API请求进行速率限制,但您可以在@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
中更改此值(如果这是一个计算量很大的操作,那么您可能还是想要这样做)。
您还可以选择使用基本身份验证或令牌身份验证,或者基本上是Laravel附带的任何其他内容。
注意:NodeJS也非常擅长做这些事情,所以如果你想要更多的选项,你可以考虑制作一个简单的节点应用来做到这一点。