当前位置: 首页 > 软件库 > Web应用开发 > Web框架 >

Firefly Framework

Java异步Web框架
授权协议 Apache 2.0
开发语言 Kotlin Java
所属分类 Web应用开发、 Web框架
软件类型 开源软件
地区 国产
投 递 者 端木朝
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

什么是Firefly?

Firefly是一个Java异步Web框架,它能帮助您方便和快速的创建web应用。其主要功能包括:异步HTTP服务器/客户端,异步TCP服务器/客户端,数据库访问,IOC框架等。部署Firefly不需要任何额外的web容器。Firefly使用高度可伸缩的SEDA架构能充分发挥硬件的性能。

事件驱动

传统的阻塞模型会消耗大量的线程,从而导致占用的大量内存和上下文切换开销。Firefly的API使用事件驱动模型,用很少的线程去处理很高的并发请求。

函数编程

Firefly提供了函数风格和链式调用API来编写网络应用程序,它可以让您使用极简主义的代码,流畅的开发网络应用程序。例如:

public class HelloHTTPServerAndClient {
    public static void main(String[] args) {
        Phaser phaser = new Phaser(2);

        HTTP2ServerBuilder httpServer = $.httpServer();
        httpServer.router().get("/").handler(ctx -> ctx.write("hello world! ").next())
                  .router().get("/").handler(ctx -> ctx.end("end message"))
                  .listen("localhost", 8080);

        $.httpClient().get("http://localhost:8080/").submit()
         .thenAccept(res -> System.out.println(res.getStringBody()))
         .thenAccept(res -> phaser.arrive());

        phaser.arriveAndAwaitAdvance();
        httpServer.stop();
        $.httpClient().stop();
    }
}

 

Kotlin支持

Firefly同样提供了Kotlin DSL风格的API,Kotlin DSL以半声明的方式构造程序,能清晰的表达程序的结构和意图。例如:

fun main(args: Array) {
    HttpServer {
        router {
            httpMethod = HttpMethod.GET
            path = "/"

            asyncHandler {
                end("hello world!")
            }
        }
    }.listen("localhost", 8080)
}
fun main(args: Array): Unit = runBlocking {
    val msg = firefly.httpClient().get("http://localhost:8080").asyncSubmit().stringBody
    println(msg)
}

Firefly Kotlin HTTP 服务器和客户端使用协程(coroutine)消除回调风格的代码,能让程序变得更简单清晰,并保留了异步IO的性能与伸缩性。

更多详细的用例可以在Firefly的文档中找到。

 

  • firefly game server framework 论坛:     点击打开链接

  • Firefly ROC-Rk3399-PC Android 8.1 源码编译问题解决 从淘宝购买了一块Firefly 的ROC-Rk3399-PC 的板子,下载了他们提供的Android 8.1源码,不知是因为我用的是Ubuntu 22.04(官方教程里是18.04)的原因还是一些软件版本更新导致(已知gcc的版本太新就会出现一个问题,但是问题报错我没有记录下来,接下来的第一个步骤就是解决这个问题

  • 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、编译错误 1. loadlocale.c 提示如下错误 loadlocale.c:130: _nl_intern

  • 本帖最后由 xmzzy 于 2015-10-20 18:11 编辑 firefly rk3288开发板手动开启蓝牙过两秒会自动关闭。开启不成功。求助! 我在log中在怀疑出错的地方前后用#号隔,不知道问题定位对不对,也不知道该怎么解决。 logcat打印: W/AudioTrack(  587): AUDIO_OUTPUT_FLAG_FAST denied by client I/Activity

  • 本帖最后由 houxn22 于 2018-7-13 13:06 编辑 小白折腾记,献给需要的人,少走些弯路。 参考了帖子:之前的修改有问题,不是真正的4K,这里重新改一下(2018-07-13)~~ Android版本:5.1 内核版本:3.10.79 要使板子HDMI输出4K,需要修改内核层和Android framework层。一、内核层修改 在没修改内核前,adb进入shell, cd /s

  • Android版本:5.1 内核版本:3.10.79  要使板子HDMI输出4K,需要修改内核层和Android framework层。 参考了帖子:https://blog.csdn.net/houxn22/article/details/80666379 一、内核层修改 在没修改内核前,adb进入shell, cd /sys/class/display/HDMI;cat modes,输出当前显

  • 1,最好在Conda下新建一个虚拟环境进行安装。 Anaconda 官网下载地址:https://www.anaconda.com/download/ 配置conda环境变量: 控制面板\系统和安全\系统\高级系统设置\环境变量\用户变量\PATH 中添加 **anaconda的安装目录的Scripts文件夹**, 比如我的路径是D:\rjaz\anaconda\az\Scripts, 看个人

  • 单独编译framework然后make snod生成的system.img simg2img 转换row格式 路径:/root/proj/firefly-rk3399 文献 单独编译framework 其中如果改图片,生成framework-res.apk 图片路径:~/proj/firefly-rk3399/frameworks/base/core/res/assets/images frame

  • Firefly客户端安装图解 第 PAGE 6 页 共 NUMPAGES 6 页Firefly客户端安装图解安装客户端支撑软件单击“开始|设置|控制面板|添加/删除程序”,窗口显示如图(一): 图(一)检查客户端是否已安装以下支撑软件①j2sdk-1.4.2_18或以上版本;②.NET Framework2.0;③VJ#2.0可再发行组件包。如果没有安装,请分别安装工具包内如下软件:①\j2sdk

 相关资料
  • 在play,jersey,spring不同于具有池线程的典型多线程服务器。https://jersey.java.net/documentation/latest/async.html https://www.playframework.com/documentation/2.3.x/JavaAsync 一个线程正在侦听,并且在新线程中发生繁重的处理,此外,Web中的非阻塞请求不能与Java中的非

  • 问题内容: 我有一个作为常规SOAP Web服务公开的接口。该接口的一种方法包括让客户端将文件发送到服务器,然后服务器处理该文件并返回结果文件。处理文件可能需要一些时间,因此我认为使用异步调用此方法是一个更好的主意。我考虑了以下流程: 客户端调用异步方法,并使用附件(MTOM)发送文件。服务器接收到文件后,会将响应发送回客户端,表明已接收到该文件,并将在不久后对其进行处理。处理完文件后,会将响应发

  • 问题内容: 我有ajax请求执行3个任务: 保存模型(数据库) 发电子邮件 提供成功或失败的消息。 因为此任务需要太多时间。用户可以等待长达20秒的响应(成功或失败的消息)。并且,如果用户关闭浏览器,则它停止在该用户当前处理的操作之一中。 这是糟糕的用户体验。 我希望用户将其数据提交给我的控制器,然后他将收到“成功或失败的消息”。并且该过程将完全在服务器端,并且它应该支持多个会话。 我怎样才能做到

  • EasySwoole支持在定时器、控制器处理中等多处位置使用异步进程。 CoreSwooleAsyncTaskManager是对Swoole Task的封装实现。 AbstractAsyncTask CoreAbstractInterfaceAbstractAsyncTask 定义了异步任务的接口实现,一个异步任务对象都应当基础AbstractAsyncTask。 class Task exten

  • 到目前为止,我们已经看到了许多使Tornado成为一个Web应用强有力框架的功能。它的简单性、易用性和便捷性使其有足够的理由成为许多Web项目的不错的选择。然而,Tornado受到最多关注的功能是其异步取得和提供内容的能力,它有着很好的理由:它使得处理非阻塞请求更容易,最终导致更高效的处理以及更好的可扩展性。在本章中,我们将看到Tornado异步请求的基础,以及一些推送技术,这种技术可以使你使用更

  • 这是我的代码: 但是当我从控制器调用函数时。它显示错误 在上一个异步操作完成之前,在此上下文上启动了第二个操作。使用“await”确保在该上下文上调用另一个方法之前已完成任何异步操作。任何实例成员都不能保证线程安全。 请帮我解决这个问题。

  • 本章重点介绍Web框架及其部署。 PyCharm具有部署代码和文件的简单功能。 要使用PyCharm部署代码,我们需要添加一个带有菜单选项Settings -》 Build, Execution-》 Deployment的Web服务器。 现在,包括部署项目所需的各种配置的所有设置。 在Mappings选项卡中,用户可以指定本地代码的位置以及远程复制到何处。 可以使用Tools -》 Deploym

  • 我是web服务开发的初学者。我们正在使用Spring3用java构建RESTWeb应用程序。 我们正在使用的Web服务具有异步登录方法。我们为他们提供了一个回调监听器URL,他们的服务在其中发回响应。 因此,当我们发送登录请求时,我们会收到一个空白响应作为确认。和服务发送一个响应,其中包含侦听器URL上的实际数据。 请帮助,我应该如何设计/实现调用登录服务作为同步调用?谢谢 编辑:下面是回发消息的