एक त्वरित Google खोज node.js के लिए C++ "Hello World" लिखने के लिए कम से कम एक ट्यूटोरियल उत्पन्न करती है, लेकिन यह स्पष्ट नहीं है कि केवल सी का उपयोग करके ऐसा एक्सटेंशन लिखना संभव है। मान लीजिए कि यह संभव है, मुझे किस चुनौतियों/सीमाओं का सामना करना पड़ेगा?सी में एक node.js एक्सटेंशन लिखना संभव है (सी ++ नहीं)?
उत्तर
यदि आप चाहें तो सी में अपने एक्सटेंशन के कुछ हिस्सों को लिख सकते हैं, लेकिन आपको कम से कम सी ++ कोड की आवश्यकता होगी ताकि आपके सी कोड को नोड के साथ चिपकाया जा सके।
जैसा कि आपने अपने हैलोवर्ल्ड में देखा होगा, एक्सटेंशन v8.h
और node.h
हेडर पर निर्भर हैं, जिनमें नोड की अपेक्षा रखने वाली सभी कक्षाएं हैं। उन लोगों के बिना, आप नोड पर वापस निर्यात करने के लिए जेएस ऑब्जेक्ट को सही ढंग से बनाने में सक्षम नहीं होंगे।
उसने कहा, आप आसानी से सी ++ कार्यों का एक छोटा सा सेट लिख सकते हैं जो केवल सी कार्यों को कॉल करते हैं, और किसी प्रकार की सी संरचना को लपेटते हैं।
पर हैकर समाचार इस मिला:
https://github.com/wesolows/v8plus
v8 +: नोड ऐड-ऑन सी ++ सी सीमा को
यह परत सब बिना एक तरह से सी में कम से कम सरल नोड एडऑन लिखने के लिए प्रदान करता है भयानक सी ++ गोप आप अन्यथा उपयोग करने की उम्मीद की जाएगी। वह गोद अभी भी मौजूद है, लेकिन आपको इसे लिखना नहीं है। सबसे महत्वपूर्ण बात यह है कि आप भ्रमित और त्रुटि-प्रवण सी ++ अर्थशास्त्र से परहेज करते हुए, अपने मॉड्यूल को एक सॉन प्रोग्रामिंग वातावरण में लिख सकते हैं।
#define BUILDING_NODE_EXTENSION #include <node.h> extern "C" void f(int i, char c, float x); using namespace v8;
यदि आप कई सी कार्यों, तो यह के माध्यम से बांटा जा सकता है:
उदाहरण निर्वासन का उपयोग कर अपने सी ++ कोड में अलग-अलग सी समारोह की घोषणा करने के
ऐसा लगता है कि यह संस्करण> Node.js 0.10 के लिए काम नहीं करेगा, बस सुनिश्चित करने के लिए एक समस्या दायर की –
आवश्यकता "सी" वाक्य रचना धनुकोष्ठक:
extern "C" {
void f(int i, char c, float x);
int g(char* s, char const* s2);
double sqrtOfSumOfSquares(double a, double b);
}
तो सी ++ समारोह से फ़ंक्शन को कॉल करें:
Handle<Value> MyFunction(const Arguments& args) {
HandleScope scope;
f(7, 'x', 3.14); // <---
return scope.Close(String::New("Hello"));
}
Handle<Value> CreateFunction(const Arguments& args) {
HandleScope scope;
Local<FunctionTemplate> tpl = FunctionTemplate::New(MyFunction);
Local<Function> fn = tpl->GetFunction();
fn->SetName(String::NewSymbol("theFunction")); // omit this to make it anonymous
return scope.Close(fn);
}
void Init(Handle<Object> target) {
target->Set(String::NewSymbol("createFunction"),
FunctionTemplate::New(CreateFunction)->GetFunction());
}
NODE_MODULE(addon, Init)
नोट: नमूना कोड का उपयोग कर से Nodejs Addons
हमारे पास कम से कम 3 अच्छा विकल्प:
नोड ffi: Node.js विदेश समारोह इंटरफ़ेस
लोड हो रहा है और गतिशील फोन करने के लिए ऐड-ऑन शुद्ध जावास्क्रिप्ट का उपयोग कर पुस्तकालयों।यह किसी भी सी कोड लिखने के बिना देशी पुस्तकालयों के लिए बाइंडिंग बनाने के लिए इस्तेमाल किया जा सकता
https://github.com/node-ffi/node-ffi
बड़ा घूँट: सरलीकृत आवरण और इंटरफेस जेनरेटर
(एक ही बार में कई समस्याओं यह कई भाषाओं के लिए रैपर उत्पन्न करता है, क्या हल करती है)
http://www.swig.org/
emscripten
उच्च optimizable जावास्क्रिप्ट कि यहां तक कि पास देशी गति से वेब पर प्लगइन के बिना ही चलाता है, में संकलित C और C++।
http://kripken.github.io/emscripten-site/
यदि आपका मॉड्यूल libuv का उपयोग करता है तो आप इसे निष्पादन योग्य नोड से लिंक कर सकते हैं। यह libuv कार्यों को साझा लाइब्रेरी के रूप में निर्यात करता है।
फिर आप इसके साथ इंटरफेस करने के लिए नोड-एफएफआई का उपयोग कर सकते हैं (कोई सी ++ ज्ञान यहां आवश्यक नहीं है)।
- MSVS में एक नया DLL समाधान
- libuv डाउनलोड करें और कॉपी बनाएं शामिल हैं और करने के लिए MSVS
- डाउनलोड lib फ़ाइलें:
यहाँ मैं कैसे यह Windows पर बनाया है, का उपयोग कर MSVS है node.lib फ़ाइल और MSVS
की lib फ़ोल्डर
- उदाहरण स्रोत संकलित में रख नीचे है कि मुख्य समारोह पाश
testlib.c:
#include <stdio.h>
#include <stdlib.h>
#include "uv.h"
void (*p_callback)(int number, char *text);
void timer_cb1 (uv_timer_t* timer, int status) {
printf("libuv timer here\n", status);
p_callback(123, "it worked!");
}
void set_timer (int interval, void *pfunction) {
uv_loop_t *loop;
uv_timer_t *timer1;
printf("set_timer called. interval=%d callback=%p\n", interval, pfunction);
p_callback = pfunction;
printf("uv_version_string = %s\n", uv_version_string());
loop = uv_default_loop();
if (loop == 0) {
puts("could not get the reference to the default loop");
return;
}
puts("got the default loop. now allocating the timer struct");
timer1 = (uv_timer_t *) malloc(sizeof(uv_timer_t));
if (timer1 == 0) {
puts("malloc failed");
return;
}
puts("initializing timer");
uv_timer_init(loop, timer1);
puts("starting timer");
uv_timer_start(timer1, (uv_timer_cb) &timer_cb1, interval, interval);
puts("timer created. returning");
}
testlib.def का उपयोग करें:
EXPORTS set_timer
और node.lib
- से जोड़ने के लिए याद परीक्षण फ़ोल्डर के लिए बनाया dll ले जाएँ और इन आदेशों को वहां चलाएं:
npm install ffi
(वर्तमान में निर्माण उपकरण की आवश्यकता है। निर्देशों की जांच)
node test-lib.js
परीक्षण lib.js यहाँ है:
var ffi = require('ffi');
var testlib = ffi.Library('testlib', {
'set_timer': [ 'void', [ 'int', 'pointer' ] ]
});
var callback = ffi.Callback('void', ['int', 'string'],
function(number, text) {
console.log("javascript callback here!!! number=" + number + " text=" + text);
}
);
console.log('registering the callback...');
testlib.set_timer(500, callback);
console.log('done')
अपनी कल्पना का प्रयोग करें। हमारे पास नेटवर्किंग, वर्कर थ्रेड और libuv के अंदर अन्य विकल्प हैं ...
- 1. क्या सी में एक आत्म विनाशकारी कार्यक्रम लिखना संभव है?
- 2. node.js के लिए सी ++ मॉड्यूल लिखना
- 3. क्या सी ++ में जेनेरिक वैरैडिक ज़िप लिखना संभव है?
- 4. क्या डेल्फी के डीबगर में एक्सटेंशन लिखना संभव है?
- 5. एक पायथन सी-एक्सटेंशन
- 6. कानूनी रूप से लिखना कैसे संभव है ::: सी ++ में और ??? सी # में?
- 7. क्या कंसोल के लिए एक्सटेंशन विधियां लिखना संभव है?
- 8. सी # में एक कंसोल रैपर लिखना?
- 9. एक सामान्य व्यवहार एक्सटेंशन एक्सटेंशन संभव है?
- 10. सी/सी ++ में -2147483648 की नकारात्मकता संभव नहीं है?
- 11. प्रोफाइलिंग पायथन सी एक्सटेंशन
- 12. सी में एक EXT4 फ़ाइल सिस्टम लिखना?
- 13. PHP 5.4 के लिए सी ++ एक्सटेंशन लिखना, उदाहरण कोड अप्रचलित
- 14. सी/सी ++ में Node.js दुभाषिया को कैसे एम्बेड करें?
- 15. सी एक्सटेंशन
- 16. एक डिस्ट्यूट-निर्मित सी एक्सटेंशन
- 17. ctypes बनाम सी एक्सटेंशन
- 18. सी # एक्सटेंशन विधि प्राथमिकता
- 19. सी # में मेटाप्रोग्रामिंग संभव है?
- 20. क्या वाक्यविन्यास लिखना संभव है -()()?
- 21. क्रोम एक्सटेंशन को Chrome की सिस्टम निर्देशिका में फ़ाइल में लिखना संभव है?
- 22. एक is_functor सी ++ विशेषता वर्ग संभव है?
- 23. क्या पाइथन में फ़ायरवॉल लिखना संभव है?
- 24. कॉफीस्क्रिप्ट में प्रोटोविस कोड लिखना संभव है?
- 25. जावास्क्रिप्ट में वेब क्रॉलर लिखना संभव है?
- 26. Node.js फाइल एक्सटेंशन
- 27. रुबी सी एक्सटेंशन
- 28. सी एक्सटेंशन या साइथन
- 29. संदर्भ पाइथन सी एक्सटेंशन
- 30. सी # इवेंट व्यूअर को लिखना
आपके सी ++ ट्यूटोरियल का एक लिंक – lupz
https://www.cloudkick.com/blog/2010/aug/23/writing-nodejs-native मदद करेगा -extensions/ – noahlz