2012-10-19 21 views
6

का उपयोग कर क्लाउड 9 में बंदरगाहों की घोषणा कैसे करें मैं Cloud9 IDE (सी 9) का उपयोग करने के लिए नया हूं और अब तक कुछ मामूली चीजों को छोड़कर यह बहुत अच्छा लग रहा है।पायथन

मैं दस्तावेज़ों से देखता हूं कि एक साधारण node.js http सर्वर शुरू करने के लिए, आपको "8080" जैसे नियमित बंदरगाह के स्थान पर process.env.port में पास करना होगा।

नोड नमस्ते विश्व example:

var http = require('http'); 
http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hello World\n'); 
}).listen(process.env.PORT, process.env.IP); 

क्या मैं जानना चाहता हूँ, C9 पर, आप केवल बंदरगाहों पर सेवाओं जावास्क्रिप्ट/Node.js उपयोग शुरू कर सकते है करना चाहते हैं? या अन्य भाषाओं को भी बंदरगाह पारित करने की कुछ अन्य विधि के साथ ही काम करते हैं? विशेष रूप से अजगर + मुड़?

मैंने कुछ ट्विस्ट कोड अपलोड किया जो मेरे लिए स्थानीय रूप से काम कर रहा था, लेकिन सी 9 पर काम नहीं करेगा क्योंकि वह स्थानीय बंदरगाहों (जो पहले से उपयोग में हैं) तक पहुंचने की कोशिश कर रहा था। यहां त्रुटि

twisted.internet.error.CannotListenError: Couldn't listen on any:8080: [Errno 98] Address already in use. 

कोई भी उदाहरण उदाहरण के लिए कैसे काम करेगा, यदि संभव हो तो सी 9 पर चल रहा है?

अजगर + मुड़ नमस्ते विश्व example

from twisted.web import server, resource 
from twisted.internet import reactor 

class Simple(resource.Resource): 
    isLeaf = True 
    def render_GET(self, request): 
     return "<html>Hello, world!</html>" 

site = server.Site(Simple()) 
reactor.listenTCP(8080, site) 
reactor.run() 

documentation और GitHub issues के माध्यम से प्रारंभिक खोजें ज्यादा बारी नहीं था। मुझे उम्मीद है कि यह संभव है और मुझे बस पास करने के लिए सही पैरामीटर याद आया।


संपादित करें:

नीचे अपडेट किया गया उत्पादन

नोड कोड

console.log(process.env.PORT) 
console.log(process.env.IP) 

टर्मिनल उत्पादन

Running Node Process 
Tip: you can access long running processes, like a server, at 'http://private-cloud.mrchampe.c9.io'. 
Important: in your scripts, use 'process.env.PORT' as port and 'process.env.IP' as host. 
8080 
127.6.70.129 

अजगर कोड

import os 

print os.environ["PORT"] 
print os.environ["IP"] 

टर्मिनल उत्पादन

Running Python Process 
8080 
127.6.70.129 

मुड़ कोड

import os 
import twisted 

from twisted.web import server, resource 
from twisted.internet import reactor 

class Simple(resource.Resource): 
    isLeaf = True 
    def render_GET(self, request): 
     return "<html>Hello, world!</html>" 

site = server.Site(Simple()) 

reactor.listenTCP(int(os.environ["PORT"]), interface=os.environ["IP"]) 
reactor.run() 

टर्मिनल आउटपुट

Running Python Process 
hello world 
Traceback (most recent call last): 
    File "python/hello.py", line 17, in <module> 

reactor.listenTCP(int(os.environ["PORT"]), interface=os.environ["IP"]) 
TypeError: listenTCP() takes at least 3 non-keyword arguments (2 given) 

listenTCP लेखन त्रुटि अजीब क्योंकि 2 तर्कों Cloud9 पर स्थानीय रूप से नहीं बल्कि काम करता है। मैं नहीं देखता कि इन तर्कों का उपयोग क्यों नहीं करता है।

मेरे पास उपरोक्त कोड this सार्वजनिक क्लाउड 9 प्रोजेक्ट पर किसी भी व्यक्ति को देखने के लिए होस्ट किया गया है। धन्यवाद!

उत्तर

6

Node.js sound likeos.environ["PORT"] से process.env.PORT और process.env.IP और अजगर में os.environ["IP"]।शायद आप कोशिश कर सकते हैं:

reactor.listenTCP(int(os.environ["PORT"]), site, interface=os.environ["IP"]) 
+0

धन्यवाद! Os.environ आज्ञाएं * * समान मान प्रदर्शित कर रही हैं जैसे node.js रिपोर्ट। हालांकि, ऐसा लगता है कि पाइथन/ट्विस्ट अभी भी बंदरगाहों के लिए बाध्यकारी नहीं हैं। मुझे लगता है कि यह या तो रिएक्टर.listenTCP (जो एक त्रुटि देता है) को दिए गए तर्कों के कारण है, या क्योंकि मंच इसे अनुमति नहीं देता है। – mrchampe

+0

क्षमा करें, मेरे उत्तर में गलती। –

+0

यह काम करता है, बहुत बहुत धन्यवाद! – mrchampe

4

शायद यह सी 9 पर्यावरण प्रबंधन की सीमा है, इसलिए उपयोगकर्ता अपनी सेवा का दुरुपयोग नहीं करते हैं। मुझे लगता है कि उनके पास नोड.जेएस के संसाधनों का उपयोग करने के लिए कुछ स्तर का प्रबंधन है और इस प्रकार इन्हें बंदरगाहों को खोलने की अनुमति मिलती है।

इस मामले था और मैं था Cloud9 के साथ काम करने हैं, तो मैं शायद इस दृष्टिकोण देंगी: - Node.js सेवा है जो प्रॉक्सी की तरह कार्य करेगा, मुड़ ओर पर सुन बना सकते हैं - नए रिएक्टर बनाने overriden listenTCP और listenUDP विधियों के साथ, जो इन्हें Node.js प्रॉक्सी सेवा से जोड़ देगा।

इस प्रकार प्रॉक्सी कैसे काम करेगा, इस प्रकार है, नोड.जेएस शुरू में एक "प्रबंधन" टीसीपी पोर्ट पर सुनेंगे। फिर, जब मुड़कर सेवा शुरू होती है, तो यह उस बंदरगाह के माध्यम से नोड.जेएस और स्वयं के बीच एक टीसीपी कनेक्शन बनाएगा। फिर, जब भी टीटीसी या सुनोयूडीपी को सुनाया जाता है, तो इन आदेशों को तब नोड.जेएस सेवा में भेज दिया जाएगा, जो बदले में बंदरगाह खोल देगा और उस बंदरगाह के माध्यम से सभी कॉम्यूनिकेशन को उस मौजूदा टीसीपी कनेक्शन के माध्यम से मोड़ने के लिए प्रॉक्सी किया जाएगा।

+0

मैंने वही बात सोचा। मुझे चिंता थी कि जैसा कि आपने सुझाव दिया था, उसे किसी नोड.जेएस प्रॉक्सी लिखना पड़ सकता है। हालांकि, पाइथन के साथ आप दूसरे जवाब में दिखाए गए अनुसार "os.environ" का उपयोग कर सकते हैं। हालांकि, मैं इस बात से सहमत हूं कि यह * क्लाउड 9 की सीमा नहीं है, आम तौर पर ऐसी कई अन्य सीमाएं हैं जो विचारों पर कुछ चीजों को परेशान करती हैं। आपके सुझावों के लिए धन्यवाद। – mrchampe

2

ऐसा नहीं है कि जीन पॉल का जवाब 'इंटरफेस' के स्थान पर मेरे लिए भी काम किया है, लेकिन मैं 'पता' का इस्तेमाल किया था उल्लेख के लायक है:

http_server.listen(int(os.environ.get("PORT")), address=os.environ["IP"]) 
+0

मैं उत्सुक हूं - क्या आप ट्विस्ट या अन्य ढांचे (बोतल, टर्ननाडो इत्यादि) का उपयोग कर रहे हैं? – mrchampe

+0

मैं टोरनाडो का उपयोग कर रहा हूं - धन्यवाद, इसका उल्लेख होना चाहिए था। –