2011-10-07 107 views
0

我想在Go的GAE上創建一個Web應用程序,我需要它來收聽自定義端口。我如何設置它?我試圖用http.ListenAndServe(「12345」,無)在沙箱中,但在我的控制檯得到這個:Go App中的Google App Engine自定義IP端口

WARNING 2011-10-07 20:01:01,252 urlfetch_stub.py:108] No ssl package found. urlfetch 

will not be able to validate SSL certificates. 
INFO  2011-10-07 20:01:01,847 appengine_rpc.py:159] Server: appengine.google.com 
INFO  2011-10-07 20:01:01,855 appcfg.py:463] Checking for updates to the SDK. 
INFO  2011-10-07 20:01:04,625 appcfg.py:480] The SDK is up to date. 
WARNING 2011-10-07 20:01:04,625 datastore_file_stub.py:512] Could not read datastore data from /var/folders/e0/e0U5NtMXFHOB6jVwkVhsnE+++TM/-Tmp-/dev_appserver.datastore 
INFO  2011-10-07 20:01:04,627 rdbms_sqlite.py:58] Connecting to SQLite database '' with file '/var/folders/e0/e0U5NtMXFHOB6jVwkVhsnE+++TM/-Tmp-/dev_appserver.rdbms' 
WARNING 2011-10-07 20:01:04,633 dev_appserver.py:4748] Could not initialize images API; you are likely missing the Python "PIL" module. ImportError: No module named _imaging 
INFO  2011-10-07 20:01:04,641 dev_appserver_multiprocess.py:637] Running application tpbitblock on port 8080: http://localhost:8080 
INFO  2011-10-07 20:01:08,448 __init__.py:365] building _go_app 
INFO  2011-10-07 20:01:11,105 __init__.py:351] running _go_app 
throw: init rescheduling 

runtime.throw+0x40 /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/runtime.c:102 
    runtime.throw(0x278c7f, 0xdc73) 
schedule+0x3e /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/proc.c:535 
    schedule(0x10803000, 0x10803000) 
runtime.mcall+0x3a /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/386/asm.s:174 
    runtime.mcall(0x10803000, 0x0) 

goroutine 2 [1]: 
net.*pollServer·Run /private/tmp/appengine/google_appengine/goroot/src/pkg/net/fd.go:213 
    net.*pollServer·Run(0x10801c90, 0x0) 
runtime.goexit /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/proc.c:178 
    runtime.goexit() 
----- goroutine created by ----- 
net.newPollServer+0x2dd /private/tmp/appengine/google_appengine/goroot/src/pkg/net/newpollserver.go:39 

goroutine 1 [4]: 
runtime.gosched+0x4d /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/proc.c:603 
    runtime.gosched() 
runtime.chanrecv+0x14d /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/chan.c:361 
    runtime.chanrecv(0x1081d900, 0x30800e6c, 0x0, 0x0, 0x0, ...) 
runtime.chanrecv1+0x3f /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/chan.c:424 
    runtime.chanrecv1(0x1081d900, 0x1081e580) 
net.*pollServer·WaitRead+0x47 /private/tmp/appengine/google_appengine/goroot/src/pkg/net/fd.go:255 
    net.*pollServer·WaitRead(0x10801c90, 0x1081e580, 0x0) 
net.*netFD·accept+0x2ae /private/tmp/appengine/google_appengine/goroot/src/pkg/net/fd.go:605 
    net.*netFD·accept(0x1081e580, 0x45716, 0x0, 0x0, 0x0, ...) 
net.*TCPListener·AcceptTCP+0x53 /private/tmp/appengine/google_appengine/goroot/src/pkg/net/tcpsock.go:272 
    net.*TCPListener·AcceptTCP(0x108008b8, 0x30800f00, 0x0, 0x0) 
net.*TCPListener·Accept+0x36 /private/tmp/appengine/google_appengine/goroot/src/pkg/net/tcpsock.go:282 
    net.*TCPListener·Accept(0x108008b8, 0x0, 0x0, 0x0, 0x0, ...) 
http.*Server·Serve+0x96 /private/tmp/appengine/google_appengine/goroot/src/pkg/http/server.go:868 
    http.*Server·Serve(0x10839d20, 0x10839e20, 0x108008b8, 0x0, 0x0, ...) 
http.*Server·ListenAndServe+0x9c /private/tmp/appengine/google_appengine/goroot/src/pkg/http/server.go:855 
    http.*Server·ListenAndServe(0x10839d20, 0x10839d20, 0x406) 
http.ListenAndServe+0x52 /private/tmp/appengine/google_appengine/goroot/src/pkg/http/server.go:920 
    http.ListenAndServe(0x155640, 0x6, 0x0, 0x0, 0x0, ...) 
BitBlock.init·1+0x174 BitBlock/BitBlock.go:43 
    BitBlock.init·1() 
BitBlock.init+0x70 BitBlock/BitBlock.go:0 
    BitBlock.init() 
main.init+0x39 _go_main.go:0 
    main.init() 
runtime.mainstart+0x5 /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/386/asm.s:91 
    runtime.mainstart() 
runtime.goexit /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/proc.c:178 
    runtime.goexit() 
----- goroutine created by ----- 
_rt0_386+0xbf /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/386/asm.s:80 
ERROR 2011-10-07 20:01:12,196 dev_appserver.py:4200] Exception encountered handling request 
Traceback (most recent call last): 
    File "/Google App Engine/google/appengine/tools/dev_appserver.py", line 4143, in _HandleRequest 
    self._Dispatch(dispatcher, self.rfile, outfile, env_dict) 
    File "/Google App Engine/google/appengine/tools/dev_appserver.py", line 4049, in _Dispatch 
    base_env_dict=env_dict) 
    File "/Google App Engine/google/appengine/tools/dev_appserver.py", line 616, in Dispatch 
    base_env_dict=base_env_dict) 
    File "/Google App Engine/google/appengine/tools/dev_appserver.py", line 3120, in Dispatch 
    self._module_dict) 
    File "/Google App Engine/google/appengine/tools/dev_appserver.py", line 2972, in ExecuteCGI 
    env, infile, outfile) 
    File "/Google App Engine/google/appengine/ext/go/__init__.py", line 399, in execute_go_cgi 
    GO_APP.make_and_run() 
    File "/Google App Engine/google/appengine/ext/go/__init__.py", line 362, in make_and_run 
    wait_until_go_app_ready(self.proc.pid) 
    File "/Google App Engine/google/appengine/ext/go/__init__.py", line 285, in wait_until_go_app_ready 
    raise Exception('unable to start ' + GO_APP_NAME) 
Exception: unable to start _go_app 
INFO  2011-10-07 20:01:12,242 dev_appserver.py:4247] "GET/HTTP/1.1" 500 - 
INFO  2011-10-07 20:01:12,505 __init__.py:351] running _go_app 
throw: init rescheduling 

runtime.throw+0x40 /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/runtime.c:102 
    runtime.throw(0x278c7f, 0xdc73) 
schedule+0x3e /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/proc.c:535 
    schedule(0x10803000, 0x10803000) 
runtime.mcall+0x3a /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/386/asm.s:174 
    runtime.mcall(0x10803000, 0x0) 

goroutine 2 [1]: 
net.*pollServer·Run /private/tmp/appengine/google_appengine/goroot/src/pkg/net/fd.go:213 
    net.*pollServer·Run(0x10801c90, 0x0) 
runtime.goexit /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/proc.c:178 
    runtime.goexit() 
----- goroutine created by ----- 
net.newPollServer+0x2dd /private/tmp/appengine/google_appengine/goroot/src/pkg/net/newpollserver.go:39 

goroutine 1 [4]: 
runtime.gosched+0x4d /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/proc.c:603 
    runtime.gosched() 
runtime.chanrecv+0x14d /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/chan.c:361 
    runtime.chanrecv(0x1081d900, 0x30800e6c, 0x0, 0x0, 0x0, ...) 
runtime.chanrecv1+0x3f /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/chan.c:424 
    runtime.chanrecv1(0x1081d900, 0x1081e580) 
net.*pollServer·WaitRead+0x47 /private/tmp/appengine/google_appengine/goroot/src/pkg/net/fd.go:255 
    net.*pollServer·WaitRead(0x10801c90, 0x1081e580, 0x0) 
net.*netFD·accept+0x2ae /private/tmp/appengine/google_appengine/goroot/src/pkg/net/fd.go:605 
    net.*netFD·accept(0x1081e580, 0x45716, 0x0, 0x0, 0x0, ...) 
net.*TCPListener·AcceptTCP+0x53 /private/tmp/appengine/google_appengine/goroot/src/pkg/net/tcpsock.go:272 
    net.*TCPListener·AcceptTCP(0x108008b8, 0x30800f00, 0x0, 0x0) 
net.*TCPListener·Accept+0x36 /private/tmp/appengine/google_appengine/goroot/src/pkg/net/tcpsock.go:282 
    net.*TCPListener·Accept(0x108008b8, 0x0, 0x0, 0x0, 0x0, ...) 
http.*Server·Serve+0x96 /private/tmp/appengine/google_appengine/goroot/src/pkg/http/server.go:868 
    http.*Server·Serve(0x10839d20, 0x10839e20, 0x108008b8, 0x0, 0x0, ...) 
http.*Server·ListenAndServe+0x9c /private/tmp/appengine/google_appengine/goroot/src/pkg/http/server.go:855 
    http.*Server·ListenAndServe(0x10839d20, 0x10839d20, 0x406) 
http.ListenAndServe+0x52 /private/tmp/appengine/google_appengine/goroot/src/pkg/http/server.go:920 
    http.ListenAndServe(0x155640, 0x6, 0x0, 0x0, 0x0, ...) 
BitBlock.init·1+0x174 BitBlock/BitBlock.go:43 
    BitBlock.init·1() 
BitBlock.init+0x70 BitBlock/BitBlock.go:0 
    BitBlock.init() 
main.init+0x39 _go_main.go:0 
    main.init() 
runtime.mainstart+0x5 /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/386/asm.s:91 
    runtime.mainstart() 
runtime.goexit /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/proc.c:178 
    runtime.goexit() 
----- goroutine created by ----- 
_rt0_386+0xbf /private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/386/asm.s:80 
ERROR 2011-10-07 20:01:13,530 dev_appserver.py:4200] Exception encountered handling request 
Traceback (most recent call last): 
    File "/Google App Engine/google/appengine/tools/dev_appserver.py", line 4143, in _HandleRequest 
    self._Dispatch(dispatcher, self.rfile, outfile, env_dict) 
    File "/Google App Engine/google/appengine/tools/dev_appserver.py", line 4049, in _Dispatch 
    base_env_dict=env_dict) 
    File "/Google App Engine/google/appengine/tools/dev_appserver.py", line 616, in Dispatch 
    base_env_dict=base_env_dict) 
    File "/Google App Engine/google/appengine/tools/dev_appserver.py", line 3120, in Dispatch 
    self._module_dict) 
    File "/Google App Engine/google/appengine/tools/dev_appserver.py", line 2972, in ExecuteCGI 
    env, infile, outfile) 
    File "/Google App Engine/google/appengine/ext/go/__init__.py", line 399, in execute_go_cgi 
    GO_APP.make_and_run() 
    File "/Google App Engine/google/appengine/ext/go/__init__.py", line 362, in make_and_run 
    wait_until_go_app_ready(self.proc.pid) 
    File "/Google App Engine/google/appengine/ext/go/__init__.py", line 285, in wait_until_go_app_ready 
    raise Exception('unable to start ' + GO_APP_NAME) 
Exception: unable to start _go_app 
INFO  2011-10-07 20:01:13,531 dev_appserver.py:4247] "GET /favicon.ico HTTP/1.1" 500 - 

回答

2

你不能做到這一點。 App Engine不允許自定義http端口。 App Engine環境存在很大的沙盒問題,並非您在Pure Go(或Java或Python)中可以做的所有事情都可以在各自的App Engine環境中使用。

http://code.google.com/appengine/docs/go/overview.html

由於與Java和Python的環境中,並非所有的標準庫的功能是可用的沙箱內。例如,嘗試打開套接字或寫入文件將返回os.EINVAL錯誤。

Go應用程序在一個安全的「沙箱」環境中運行,其庫集合減少。例如,應用程序無法將數據寫入本地文件系統或進行任意網絡連接。相反,應用程序使用App Engine提供的可擴展服務來存儲數據並通過Internet進行通信。

+0

嗯,我可以看到我能做出的請求GAE中的非標準端口:http://code.google.com/appengine/docs/go/urlfetch/overview.html。我應該如何在Go中獲取我自己的地址以獲取HTTP請求,以及當有人爲該地址調用錯誤的端口(它沒有通過或者被轉發到正常端口)時會發生什麼? – ThePiachu

+1

你現在問完全不同的問題。在你原來的問題中,你問過關於在App Engine上的非標準端口上執行http服務器。本頁面討論瞭如何執行http客戶端請求。不同的東西。 IP地址是計算機的屬性,而不是Go。您無法選擇App Engine服務器的IP地址,Google會在您選擇的服務器之間彈出您的App Engine代碼。他們會給你一個穩定的DNS名稱。連接到App Engine上的非http端口很可能被拒絕。 –