首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过服务器处理IO操作并使用单独的框架/应用程序构建UI

通过服务器处理IO操作并使用单独的框架/应用程序构建UI
EN

Software Engineering用户
提问于 2023-03-22 16:04:12
回答 1查看 57关注 0票数 0

我正在尝试构建一个文件编辑器,并且我想使用Flutter构建UI。但是,我希望在Rust中实现IO操作(读取文件、应用更改等)。

我想使用Rust的原因是,对于昂贵的操作,它会更快,而且它似乎有一个比Dart更好的序列化框架(通过serde https://serde.rs/) (Dart似乎只有json_serializable)。

我的方法是使用火箭框架( Rocket,https://rocket.rs/)建立服务器,它在端口8080上创建服务器。我的想法是,我可以使用http包(或任何其他包)发出请求,并在Rust中收听这些请求。我注意到VSCode和其他编辑器对语言绑定的操作(使用LSP)使用了类似的方法。

例如,我可以重命名文件的一种方法是在/rename路由上使用旧文件名和新名称作为参数创建POST请求。

这种前端-后端解耦是一种常见的/规范的方法,还是有任何不利之处?

我是这个领域的新手,所以我为我可能使用的任何理论错误或错误术语道歉。

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2023-03-22 22:22:25

混合语言是很好的,但使用套接字是糟糕的设计。您有一个程序被分成两个部分,其中一部分到达外部,以找到另一部分。它很有可能找到了错误的部分。如果我两次启动您的程序,其中一个后端是否因为端口已经在使用而失败,然后两个前端都连接到同一个后端?恶意用户能否在后端启动之前绑定到后端端口,然后欺骗前端显示虚假信息?恶意用户能否连接到后端并使其删除所有文件?如果我已经在8080端口上运行web服务器怎么办?(是的,语言服务器也有类似的问题)

您可以解决这些问题,但最好首先确保它们不是问题--找到一种方法来混合语言,而不是强迫您将程序分成两部分并使用套接字。一种可能是将套接字更改为非套接字,例如匿名管道 (Windows),它可以由子进程继承,而不需要端口号。

但是最好的方法是在同一个程序中混合不同的语言,这样你就不需要把它分开了。要在同一个程序中混合不同的语言,您需要一个外部函数接口,这是一种从另一种语言调用一种语言的方法。

C是“最低公分母”,这是非常普遍的。大量的语言(包括Flutter)能够调用C函数,能够编写类似于C函数的函数的语言(包括Rust)较少。下面是我发现的一些关于从颤振调用C函数的方法下面是我在锈病中编写一个C库的一些发现。通过将正确的部分放在一起,您应该能够用Rust编写一个类似于用C编写的共享库,然后调用它。

注意,您不需要这两页中的所有部分。由于您实际上并不是在编写C程序,所以您不需要一个头文件来告诉C编译器库中有哪些函数,但是您确实需要一些内容来告诉Flutter编译器库中有哪些函数。因为它是用Rust编写的,所以您可能会发现用cargo而不是cmake构建库会更好。可能需要一些尝试和错误才能找到适合您的编译工作流。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/444633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档