日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

使用Spring Boot和Rust生成二維碼的性能比較(附代碼)

來源: 責編: 時間:2023-09-25 10:39:12 337觀看
導讀本文重點比較使用虛擬線程的SpringBoot和使用Actix框架的Rust,來實現QR碼生成器API。這兩種技術都是成熟的,無需進一步介紹。接下來,讓我們直接深入測試設置的細節。一、測試設置1. 環境所有測試都在裝有16GB RAM的MacBo

本文重點比較使用虛擬線程的SpringBoot和使用Actix框架的Rust,來實現QR碼生成器API。這兩種技術都是成熟的,無需進一步介紹。接下來,讓我們直接深入測試設置的細節。pTX28資訊網——每日最新資訊28at.com

pTX28資訊網——每日最新資訊28at.com

一、測試設置

1. 環境

所有測試都在裝有16GB RAM的MacBook Pro M1上進行。使用的測試工具是Bombardier的定制版本,支持在請求體中包含隨機URL。這些測試使用的軟件版本如下:pTX28資訊網——每日最新資訊28at.com

  • SpringBoot 3.1.3,帶有Java v20(啟用預覽以獲取虛擬線程)
  • Rust 1.72.0

2. 代碼

這個QR碼生成器應用程序被設計成接收一個JSON請求體,其中包含一個名為"urlToEmbed"的必需參數。該應用程序的主要功能是為指定的URL生成一個QR碼,并在HTTP響應中以PNG格式傳送QR碼。為增加復雜性,該應用程序在HTTPS上運行。pTX28資訊網——每日最新資訊28at.com

(1) SpringBoot(虛擬線程)pTX28資訊網——每日最新資訊28at.com

server.port=3000server.ssl.certificate=/Users/mayankc/Work/source/certs/cert.pemserver.ssl.certificate-private-key=/Users/mayankc/Work/source/certs/key.pem
package com.example.qr;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.embedded.tomcat.TomcatProtocolHandlerCustomizer;import org.springframework.context.annotation.Bean;import java.util.concurrent.Executors;@SpringBootApplicationpublic class QrApplication {  public static void main(String[] args) {    SpringApplication.run(QrApplication.class, args);  }  @Bean  public TomcatProtocolHandlerCustomizer<?> protocolHandlerVirtualThreadExecutorCustomizer() {    return protocolHandler -> {      protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor());    };  }}
package com.example.qr;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.http.ResponseEntity;import org.springframework.http.HttpStatus;import org.springframework.http.HttpHeaders;import org.springframework.web.bind.annotation.RestController;import java.util.Optional;import com.example.qr.QrRequest;import com.example.qr.QrGenerator;@RestControllerpublic class QrController {  @PostMapping("/qr")  public ResponseEntity handleRequest(@RequestBody QrRequest qrRequest) {    if(qrRequest.getUrlToEmbed() == null) {      return new ResponseEntity<>(HttpStatus.BAD_REQUEST);    }    try {      HttpHeaders httpHeaders = new HttpHeaders();      httpHeaders.add(HttpHeaders.CONTENT_TYPE, "image/png");      return new ResponseEntity<byte[]>(         QrGenerator.generateQR(qrRequest.getUrlToEmbed(), 512, 512),          httpHeaders,         HttpStatus.OK);    } catch (Exception e) {      return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);    }  }}
package com.example.qr;import java.io.ByteArrayOutputStream;import java.io.IOException;import com.google.zxing.BarcodeFormat;import com.google.zxing.WriterException;import com.google.zxing.client.j2se.MatrixToImageConfig;import com.google.zxing.client.j2se.MatrixToImageWriter;import com.google.zxing.common.BitMatrix;import com.google.zxing.qrcode.QRCodeWriter;public class QrGenerator {  public static byte[] generateQR(String text, int width, int height) throws WriterException, IOException {    QRCodeWriter qrCodeWriter = new QRCodeWriter();    BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);    ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream();    MatrixToImageConfig con = new MatrixToImageConfig() ;    MatrixToImageWriter.writeToStream(bitMatrix, "PNG", pngOutputStream, con);    byte[] pngData = pngOutputStream.toByteArray();    return pngData;  }}
package com.example.qr;public class QrRequest {  private String urlToEmbed;  public String getUrlToEmbed() {    return this.urlToEmbed;  }  public void setUrlToEmbed(String urlToEmbed) {    this.urlToEmbed = urlToEmbed;  }}

(2) RustpTX28資訊網——每日最新資訊28at.com

[package]name = "actix_qr_generator"version = "0.1.0"edition = "2021"[dependencies]actix-web = { version = "4", features = ["openssl"] } qrcode-generator = "4.1.8"serde = { version = "1.0", features = ["derive"] }serde_json = "1"openssl = { version = "0.10" , features = ["vendored"] }
use actix_web::{web, post, App, HttpServer, HttpResponse, Responder};use qrcode_generator::QrCodeEcc;use serde::Deserialize;use openssl::ssl::{SslAcceptor, SslFiletype, SslMethod};#[derive(Deserialize)]struct QrRequest {  urlToEmbed: String,}#[post("/qr")]async fn generate_qr(qr_request: web::Json<QrRequest>) -> impl Responder {  if qr_request.urlToEmbed.is_empty() {    return HttpResponse::BadRequest().into();  }  let result: Vec<u8> = qrcode_generator::to_png_to_vec(qr_request.urlToEmbed.clone(), QrCodeEcc::Low, 512)    .unwrap();  return HttpResponse::Ok()    .content_type("image/png")    .body(result);}#[actix_web::main]async fn main() -> std::io::Result<()> {  let mut builder = SslAcceptor::mozilla_intermediate(SslMethod::tls()).unwrap();  builder    .set_private_key_file("/Users/mayankc/Work/source/perfComparisons/certs/key.pem", SslFiletype::PEM)    .unwrap();  builder    .set_certificate_chain_file("/Users/mayankc/Work/source/perfComparisons/certs/cert.pem")    .unwrap();  HttpServer::new(|| App::new().service(generate_qr))    .bind_openssl("127.0.0.1:3000", builder)?    .run()    .await}// 注意 ================================================// 該應用程序已在發布模式下構建。// =====================================================

二、結果

為了全面評估性能,這里進行了一系列細致的檢查。每個檢查包括10萬個請求,并在10、50和100個并發連接的范圍內評估它們的效率??紤]到QR碼生成的資源密集型特性,故意保持了稍低的請求量,與其他場景相比。pTX28資訊網——每日最新資訊28at.com

結果如下:pTX28資訊網——每日最新資訊28at.com

pTX28資訊網——每日最新資訊28at.com

pTX28資訊網——每日最新資訊28at.com

pTX28資訊網——每日最新資訊28at.com

根據以下公式,還生成了一個得分卡。對于每個測量,獲取獲勝的差距。如果獲勝的差距是:pTX28資訊網——每日最新資訊28at.com

  • < 5%,不給予任何分數
  • 在5%到20%之間,獲勝者得1分
  • 在20%到50%之間,獲勝者得2分
  • 50%,獲勝者得3分

pTX28資訊網——每日最新資訊28at.com

得分卡如下:pTX28資訊網——每日最新資訊28at.com

pTX28資訊網——每日最新資訊28at.com

pTX28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-11260-0.html使用Spring Boot和Rust生成二維碼的性能比較(附代碼)

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 基于Python + SnowNLP實現一個文本情感分析系統網站

下一篇: C++11中auto關鍵字的深入理解與應用

標簽:
  • 熱門焦點
  • vivo TWS Air開箱體驗:真輕 臻好聽

    在vivo S15系列新機的發布會上,vivo的最新款真無線藍牙耳機vivo TWS Air也一同發布,本次就這款耳機新品給大家帶來一個簡單的分享。外包裝盒上,vivo TWS Air保持了vivo自家產
  • 6月iOS設備性能榜:M2穩居榜首 A系列只能等一手3nm來救

    沒有新品發布,自然iOS設備性能榜的上榜設備就沒有什么更替,僅僅只有跑分變化而產生的排名變動,畢竟蘋果新品的發布節奏就是這樣的,一年下來也就幾個移動端新品,不會像安卓廠商,一
  • 0糖0卡0脂 旭日森林仙草烏龍茶優惠:15瓶到手29元

    旭日森林無糖仙草烏龍茶510ml*15瓶平時要賣為79.9元,今日下單領取50元優惠券,到手價為29.9元。產品規格:0糖0卡0脂,添加草本仙草汁,清涼爽口,富含茶多酚,保留
  • 企業采用CRM系統的11個好處

    客戶關系管理(CRM)軟件可以為企業提供很多的好處,從客戶保留到提高生產力?! RM軟件用于企業收集客戶互動,以改善客戶體驗和滿意度?! RM軟件市場規模如今超過580
  • 零售大模型“干中學”,攀爬數字化珠峰

    文/侯煜編輯/cc來源/華爾街科技眼對于絕大多數登山愛好者而言,攀爬珠穆朗瑪峰可謂終極目標。攀登珠峰的商業路線有兩條,一是尼泊爾境內的南坡路線,一是中國境內的北坡路線。相
  • 騰訊VS網易,最卷游戲暑期檔,誰能笑到最后?

    作者:無銹缽來源:財經無忌7月16日晚,上海1862時尚藝術中心。伴隨著幻象的精準命中,碩大的熒幕之上,比分被定格在了14:12,被寄予厚望的EDG戰隊以絕對的優勢戰勝了BLG戰隊,拿下了總決
  • 三星顯示已開始為AR設備研發硅基LED微顯示屏

    7月18日消息,據外媒報道,隨著蘋果首款頭顯產品Vision Pro在6月份正式推出,AR/VR/MR等頭顯產品也就將成為各大公司下一個重要的競爭領域,對顯示屏這一關
  • 2299元起!iQOO Pad開啟預售:性能最強天璣平板

    5月23日,iQOO如期舉行了新品發布會,除了首發安卓最強旗艦處理器的iQOO Neo8系列新機外,還在發布會上推出了旗下首款平板電腦——iQOO Pad,其搭載了天璣
  • 榮耀Magicbook V 14 2021曙光藍版本正式開售,擁有觸摸屏

    榮耀 Magicbook V 14 2021 曙光藍版本正式開售,搭載 i7-11390H 處理器與 MX450 顯卡,配備 16GB 內存與 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 鍵盤鍵程、
Top 主站蜘蛛池模板: 临西县| 喀喇沁旗| 彭州市| 伊宁县| 利辛县| 阿尔山市| 凤山县| 汶上县| 景德镇市| 桐城市| 武冈市| 莆田市| 马山县| 德令哈市| 紫云| 綦江县| 临沧市| 仁布县| 闸北区| 抚松县| 留坝县| 沂南县| 宁明县| 宁陕县| 离岛区| 徐闻县| 应用必备| 贵阳市| 东乌| 稻城县| 章丘市| 来安县| 三台县| 香河县| 赞皇县| 凌云县| 合山市| 阜平县| 台中市| 神农架林区| 肃宁县|