Django Web服务返回空回复
我在Django中创建了一个网络服务,并把它放在一个共享服务器上。这个Django网络服务是用来响应一个用Unity制作的游戏的请求。但是每当游戏尝试请求Django网络服务的地址时,服务器总是返回空的响应。响应内容总是:
WWW错误:服务器返回空字符串
Unity的网页播放器希望在你想要通过WWW类访问的域名上有一个名为"crossdomain.xml"的HTTP政策文件(不过如果是同一个域名托管Unity3D文件的话,这个文件就不需要)。所以我在我的域名根目录下放了一个"crossdomain.xml"文件,但我还是收到了同样的空回复。求助啊……
编辑:我通过浏览器测试过,我的服务运行得很好,并且能正常回复。而且你知道吗,当我的游戏和Django网络服务都在本地机器上运行时,它们可以正常通信。但是现在Django项目托管在实际的服务器上,当游戏尝试访问服务时,它却没有得到任何响应 :(
url.py
urlpatterns = patterns('',
url(r'^crossdomain.xml$',views.CrossDomain),
url(r'^ReadFile/$',views.ReadFile),
)
views.py
def CrossDomain(request):
f = open(settings.MEDIA_ROOT+'jsondata/crossdomain.xml', 'r')
data = f.read()
f.close()
return HttpResponse(data, mimetype="application/xml")
def ReadFile(request):
f = open(settings.MEDIA_ROOT+'jsondata/some_file.json', 'r')
data = f.read()
f.close()
return HttpResponse(data, mimetype="application/javascript")
def Test(request):
return HttpResponse("Hello", mimetype="text/plain")
1 个回答
0
正如我所说,使用Django来处理这个问题有点过于复杂,因为你其实可以直接提供服务。不过不管怎样,如果你是在不同的服务器上提供服务,可能会遇到以下问题:
A) 连接问题可能导致你的响应丢失。
B) 防火墙问题可能会影响请求的意义。
C) 服务器没有正确设置,因此可能会出现错误。
你需要在服务器上测试响应。所以,你可以通过浏览器访问服务器上的页面。如果可以访问,那么让游戏发出请求,并检查服务器的错误和访问日志。在Apache的访问日志中,你应该能看到类似这样的记录:
GET "/url" 200,每次请求都会记录一次。
如果你没有看到任何请求通过,那么要么请求没有发出,要么请求被丢失了。如果你看到了请求,那么问题可能出在代码的某个地方。