6

私はCloud9IDE(c9)を初めて使用しますが、これまでのところ、いくつかのマイナーな点を除いて、見栄えがします。

ドキュメントから、単純なnode.js httpサーバーを起動するには、「8080」などの通常のポートの代わりにprocess.env.PORTを渡す必要があることがわかります。

Node Hello Worldの

 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では、javascript /node.jsを使用してポートでのみサービスを開始できるということです。または、他の言語も同様に機能しますか?おそらく、ポートを渡す他の方法を使用しますか?具体的にはpython+Twisted?

ローカルで機能していたツイストコードをアップロードしましたが、ローカルポート(すでに使用されている)にアクセスしようとしていたため、c9では機能しませんでした。これがエラーです

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

可能であれば、c9で実行している次の例をどのように機能させるでしょうか?

Python + TwistedHelloWorldの

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()

ドキュメントとgithubの問題を最初に検索しても、あまりわかりませんでした。私はこれが可能であることを望んでおり、渡すための正しいパラメーターを見逃しました。


編集:以下の出力を更新

ノードコード

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

Pythonコード

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)

2つの引数はローカルで機能しますが、Cloud9では機能しないため、listenTCPTypeErrorは奇妙ですこれらの引数の使用が機能しない理由がわかりません。

上記のコードは、この公開Cloud9プロジェクトでホストされており、誰でも見ることができます。ありがとう!

4

3 に答える 3

6

process.env.PORTprocess.env.IPNode.js からは Pythonのandのように聞こえます。 おそらくあなたは試すことができます:os.environ["PORT"]os.environ["IP"]

reactor.listenTCP(int(os.environ["PORT"]), site, interface=os.environ["IP"])
于 2012-10-20T01:32:31.370 に答える
3

おそらくこれは c9 環境管理の制限であるため、ユーザーはサービスを過度に悪用しないでください。Node.js で使用されるリソースをある程度管理しているため、ポートを開くことができると思います。

これが事実であり、cloud9 を使用する必要がある場合、おそらく次のようにアプローチします。これらを Node.js プロキシ サービスにバインドします。

プロキシがどのように機能するかは次のとおりです。Node.js は最初に 1 つの「管理」TCP ポートをリッスンします。次に、Twisted サービスが起動すると、そのポートを介して Node.js とそれ自体の間に TCP 接続が作成されます。次に、listenTCP または listenUDP が呼び出されるたびに、これらのコマンドが Node.js サービスにディスパッチされます。Node.js サービスはポートを開き、そのポートを介したすべての通信は、既存の TCP 接続を介してツイストにプロキシされます。

于 2012-10-22T09:43:15.613 に答える
2

Jean-Paulの答えも私にとってはうまくいったことは言及する価値がありますが、「インターフェイス」の代わりに「アドレス」を使用する必要がありました。

http_server.listen(int(os.environ.get("PORT")), address=os.environ["IP"])
于 2012-11-03T22:55:51.707 に答える