2012-11-28 20 views
7

या तो http.request या net.connect में, क्या कोई विकल्प है कि मैं कनेक्शन शुरू करने के लिए नेटवर्क इंटरफ़ेस निर्दिष्ट कर सकता हूं?Node.js से शुद्ध अनुरोध करते समय नेटवर्क इंटरफ़ेस निर्दिष्ट कैसे करें?

संपादित करें: ओएस स्तर में AFAIK मैं पता स्तर निर्दिष्ट कर सकता हूं, या रूटिंग टेबल में संतुलन लोड कर सकता हूं। लेकिन मेरे सॉफ़्टवेयर में इंटरफ़ेस का चयन करने का तरीका उससे भी अधिक है, मैं जानना चाहता हूं कि मैं कोड में ऐसा कर सकता हूं या नहीं।

उत्तर

3

नोड इस में बनाया गया है:

http://nodejs.org/api/net.html#net_net_connect_options_connectionlistener

http://nodejs.org/api/http.html#http_http_request_options_callback

localAddress देखें, बस सेट है कि इंटरफ़ेस का IP करने के लिए आप चाहते उपयोग करने के लिए पसंद है।

+1

उस प्रश्न के बाद मैंने इस सवाल से पूछा, मुझे पता चला कि यह सबसे अच्छा तरीका है। मैं os.networkInterfaces() द्वारा पते को समूहित कर सकता हूं। – Vicary

3

EDIT: जैसा कि निर्माता ने इंगित किया है, उपयोगकर्ता प्रक्रिया से नेटवर्क इंटरफ़ेस निर्दिष्ट करना संभव है। मुझे सही साबित होना है। हालांकि, मुझे अभी तक एक मॉड्यूल नहीं मिला है जो इसे नोड के साथ अनुमति देता है।

डिफ़ॉल्ट रूप से, नेटवर्क इंटरफ़ेस ओएस रूटिंग तालिका द्वारा निर्धारित किया जाता है।

आप यूनिक्स सिस्टम (ओएसएक्स शामिल) पर netstat -r के साथ इस तालिका को सूचीबद्ध कर सकते हैं। बस टर्मिनल खोलें और कमांड टाइप करें। आप हो जाएगा एक सूची की तरह:

laurent ~ $ netstat -r 
Routing tables 

Internet: 
Destination  Gateway   Flags  Refs  Use Netif Expire 
default   192.168.1.1  UGSc   153  0  en0 
127    localhost   UCS    0  0  lo0 
localhost   localhost   UH    2  42  lo0 
... 

Netif क्षेत्र आप मार्ग के लिए इस्तेमाल किया नेटवर्क इंटरफेस देता है। तुम भी route साथ एक होस्ट नाम तक पहुँचने के लिए उपयोग किया जाता इंटरफ़ेस प्राप्त कर सकते हैं:

laurent ~ $ route get google.fr 
    route to: par03s02-in-f23.1e100.net 
destination: default 
     mask: default 
    gateway: 192.168.1.1 
    interface: en0 
     flags: <UP,GATEWAY,DONE,STATIC,PRCLONING> 
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount  mtu  expire 
     0   0   0   0   0   0  1500   0 

यह और अधिक एक serverfault बात है, लेकिन आप route कमांड के साथ मार्गों बदल सकते हैं। उदाहरण के लिए, इस रूट किया जाएगा यातायात X.Y.Z. करने के लिए [0-254] eth0 पर X.Y.Z.254 रहे हैं:

route add -net X.Y.Z.0/24 gw X.Y.Z.254 dev eth0 

आप मार्गों एक रिबूट बनाए रखना चाहते हैं, तो आप उन्हें /etc/network/interfaces को जोड़ सकते हैं। यदि आप कई अलग-अलग मार्गों के बीच संतुलन लोड करना चाहते हैं, तो आपको MPLS भी जांचना चाहिए।

+0

जानकारी प्राप्त करने के तरीके के बारे में स्पष्टीकरण के लिए धन्यवाद। तो मैं एक मार्ग कैसे निर्दिष्ट कर सकता हूं? मैं अधिक जानकारी देने के लिए अपना प्रश्न अपडेट करूंगा, जो मैं पूछ रहा हूं वह एक विधि है जो कोड के साथ निर्दिष्ट कर सकती है। मैं समझता हूं कि यह एक साधारण नहीं हो सकता है। : डी – Vicary

+0

मैन्युअल रूप से मार्ग निर्दिष्ट करना संभव है। आप किस ओएस को लक्षित कर रहे हैं? –

+0

मेरा मामला सेंटोस और ओएसएक्स (डार्विन) है, लेकिन अधिक आ सकता है, ज्यादातर यूनिक्स की तरह। – Vicary

1

आप उपयोग कर सकते हैं node cURL wrapper

curl = require('node-curl') 
curl('www.google.com', { INTERFACE: 'eth1', RAW: 1 }, function(err) { 
    console.info(this); 
}); 
+0

उत्तर के लिए धन्यवाद, कर्ल शुरू करने का एक अच्छा तरीका है। लेकिन मेरे सभी कोड नोड-कर्ल में पोर्ट करना एक विकल्प की तरह दिखता नहीं है। मैं वास्तव में मूल net.connect और http.request चीजें रखना चाहता हूं। – Vicary