sách gpt4 ăn đã đi

Dòng Nodejs sử dụng V8 để viết plug-in C++

In lại Tác giả: qq735679552 Thời gian cập nhật: 27-09-2022 22:32:09 29 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết blog CFSDN này Series Nodejs sử dụng V8 để viết plug-in C++ được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm đến bài viết này thì nhớ like nhé.

Dòng Nodejs sử dụng V8 để viết plug-in C++

Mặc dù hầu hết các trường hợp hiện nay đều sử dụng n-api để viết các plug-in, nhưng lớp dưới cùng vẫn là v8 (và libuv). Sử dụng v8 để viết các plug-in đơn giản và làm quen với việc sử dụng v8.

Bài viết này giới thiệu các phương pháp viết đơn giản và thường được sử dụng khi viết plug-in C++. Trên thực tế, về bản chất, khó khăn khi viết plug-in nằm ở khả năng cơ bản và sự hiểu biết về libuv và v8. Không dài dòng nữa, chúng ta hãy nhìn vào mã.

  1. #include  
  2.  
  3.  
  4. không gian tên demo { 
  5.  
  6.  
  7. sử dụng v8::FunctionCallbackInfo; 
  8. sử dụng v8::Isolate; 
  9. sử dụng v8::Địa phương
  10. sử dụng v8::Object; 
  11. sử dụng v8::String; 
  12. sử dụng v8::Value; 
  13. sử dụng v8::FunctionTemplate; 
  14. sử dụng v8::Chức năng
  15. sử dụng v8::Number; 
  16. sử dụng v8::MaybeLocal; 
  17. sử dụng v8::Context; 
  18. sử dụng v8::Int32; 
  19.  
  20.  
  21. tĩnh số nguyên tiếp theo; 
  22. //Xác định hàm công cụ để tạo seq 
  23. void GenSeq(const FunctionCallbackInfo& args) { 
  24.     Cô lập* cô lập = args.GetIsolate(); 
  25.     args.GetReturnValue().Bộ(Số::Mới(cô lập, ++seq)); 
  26.  
  27.  
  28. //Định nghĩa hàm cộng 
  29. vô hiệu Thêm vào(const FunctionCallbackInfo& args) { 
  30.     Cô lập* cô lập = args.GetIsolate(); 
  31.     số nguyên a = đối số[0].BẰNG()->Giá trị(); 
  32.     số nguyên b = đối số[1].BẰNG()->Giá trị(); 
  33.     args.GetReturnValue().Bộ(Số::Mới(cô lập, a + b)); 
  34.  
  35.  
  36. void Khởi tạo( 
  37.   Địa phương xuất khẩu, 
  38.   Địa phươngMô-đun
  39.   Địa phương bối cảnh 
  40. ) { 
  41.   Cô lập* cô lập = ngữ cảnh->GetIsolate(); 
  42.   //Tạo mẫu hàm mới 
  43.   Địa phương func = FunctionTemplate::New(cô lập); 
  44.   // Tạo một chuỗi mới đại diện cho tên hàm 
  45.   Địa phương zaylee = String::NewFromUtf8(cô lập, "zaylee", v8::NewStringType::kNormal).ToLocalChecked(); 
  46.   //Đặt tên hàm 
  47.   hàm->SetClassName(zaylee); 
  48.   //Đặt thuộc tính nguyên mẫu 
  49.   chức năng->Mẫu Nguyên mẫu()->Bộ(cô lập, "Trường nguyên mẫu", Number::New(cô lập, 1)); 
  50.   //Đặt thuộc tính đối tượng 
  51.   chức năng->Mẫu thể hiện()->Bộ(cô lập, "Trường thể hiện", Number::New(cô lập, 2)); 
  52.   chức năng->Mẫu thể hiện()->Bộ(cô lập, "thêm vào", FunctionTemplate::New(cô lập, Thêm vào)); 
  53.   //Đặt thuộc tính của chính đối tượng hàm 
  54.   chức năng->Bộ(cô lập, "Trường chức năng", Number::New(cô lập, 3)); 
  55.   // Tạo hàm dựa trên mẫu hàm 
  56.   Địa phương<Chức năng> ret = func->GetFunction(bối cảnh).ToLocalChecked(); 
  57.   Địa phương Demo = String::NewFromUtf8(cô lập, "Thử nghiệm", v8::NewStringType::kNormal).ToLocalChecked(); 
  58.   // hàm xuất 
  59.   xuất khẩu->Bộ(bối cảnh, Demo, ret).Kiểm tra(); 
  60.   // Xuất hàm công cụ 
  61.   NODE_SET_METHOD(xuất khẩu, "genSeq", GenSeq); 
  62.  
  63.  
  64. NODE_MODULE_CONTEXT_AWARE(NODE_GYP_MODULE_NAME, Khởi tạo) 
  65.  
  66.  
  67. } // bản demo không gian tên 

Viết một ví dụ kiểm tra.

  1. const { Demo, genSeq } = yêu cầu('./build/Phát hành/test.node'); 
  2. const demo = bản demo mới(); 
  3. console.log('đối tượng demo:', thử nghiệm, '\N'); 
  4. console.log('Thuộc tính nguyên mẫu:', demo.protoField, '\N'); 
  5. console.log('Thực thi phương thức thêm:', thử nghiệm.thêm vào(1,2), '\N');   
  6. console.log('Thực thi phương thức seq:', genSeq(), genSeq(), '\N'); 

Cuối cùng viết cấu hình biên dịch.

  1. {   
  2. "mục tiêu": [   
  3.   {   
  4.     "tên_mục_tiêu""Bài kiểm tra",   
  5.     "nguồn": [ "./test.cc" ]   
  6.   }   
  7. ]   

Có vẻ rất đơn giản, quy trình chung như sau.

  1. npm cài đặt -g node-gyp 
  2. cấu hình node-gyp 
  3. xây dựng node-gyp 
  4. nút kiểm tra.js 

Có nhiều cách để mở rộng nodejs. Plug-in là một loại, và sửa đổi trực tiếp kernel là một loại khác. Tôi đã giới thiệu cách sửa đổi kernel trước đây.

Địa chỉ gốc: https://mp.weixin.qq.com/s/oJDHYoPuCR7iy7XGp6eHTw.

Cuối cùng, bài viết về cách sử dụng V8 để viết các plug-in C++ trong loạt Nodejs kết thúc tại đây. Nếu bạn muốn biết thêm về cách sử dụng V8 để viết các plug-in C++ trong loạt Nodejs, vui lòng tìm kiếm các bài viết CFSDN hoặc tiếp tục duyệt qua các bài liên quan. Tôi hy vọng tất cả các bạn ủng hộ blog của tôi trong tương lai! .

29 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress