我正在使用本网站上的django-on-twisted脚本来运行一个django应用程序。 所有请求都由一个nginx服务器提供服务,该服务器将相关请求反向代理为扭曲。 我有一个API的API设置,基本上只是接收请求,并在发送响应之前对get参数进行一些处理。 但是,当一个特定的客户端正在打api时,扭曲的服务器就会closures。 下面粘贴的是Nginx的日志: the.ip.of.client – – [21/Apr/2012:11:30:36 -0400] "GET /api/url/?get=params&more=params HTTP/1.1" 499 0 "-" "Java/1.6.0_24" 扭曲的日志显示什么,但在这一点上扭曲停止工作。 通过错误代码499,我假设客户端意外closures连接,这是我没有问题。 客户是否收到回复对我来说并不重要。 这里是相关的Django视图: def api_url(request): if request.GET: get_param = request.GET.get('get', [''])[0] more_param = request.GET.get('more', [''])[0] #some processing here based on the get params return HttpResponse('OK') else: raise Http404 来自客户的请求是有效的请求,不会以不利的方式影响处理。 我已经从shell中testing了它。 当我在django开发服务器上尝试时,它也以同样的方式崩溃,没有留下任何接收请求的痕迹。 从浏览器进行testing时,一切正常。 此外,扭曲的服务器适用于所有常规使用情况。 这是我第一次面临一个问题。 任何帮助或指针将不胜感激。
我一直在从这个非常好的文章阅读编程与asynchronous模型的线程模型。 http://krondo.com/blog/?p=1209 但是,文章提到了以下几点。 只要有I / O,asynchronous程序就会通过在任务之间进行切换而胜过同步程序。 线程由操作系统pipe理。 我记得读到线程由操作系统pipe理,在Ready-Queue和Waiting-Queue之间(在其他队列之间)移动TCB。 在这种情况下,线程不会浪费时间在等待呢? 鉴于上述,asynchronous程序相比线程程序有什么优势?
我尝试使用twisted.protocols.tls实现一个可以通过TLS运行TLS的协议,这是一个使用内存BIO的OpenSSL接口。 我把它作为一个协议包装器实现,它看起来像一个普通的TCP传输,但是它有startTLS和stopTLS方法来分别添加和删除一层TLS。 这对TLS的第一层工作正常。 如果我通过“原生”扭曲TLS传输运行它也工作正常。 但是,如果尝试使用此包装提供的startTLS方法添加第二个TLS层, startTLS立即发生握手错误,并且连接以某种未知的不可用状态结束。 包装器和让它工作的两个助手看起来像这样: from twisted.python.components import proxyForInterface from twisted.internet.error import ConnectionDone from twisted.internet.interfaces import ITCPTransport, IProtocol from twisted.protocols.tls import TLSMemoryBIOFactory, TLSMemoryBIOProtocol from twisted.protocols.policies import ProtocolWrapper, WrappingFactory class TransportWithoutDisconnection(proxyForInterface(ITCPTransport)): """ A proxy for a normal transport that disables actually closing the connection. This is necessary so that when TLSMemoryBIOProtocol notices the SSL […]
从维基百科反应堆模式文章: 反应堆devise模式是一种事件处理模式,用于处理通过一个或多个input同时传送到服务处理程序的服务请求。 它命名了几个例子,例如nodejs , twisted , eventmachine 但是我所知道的上面是stream行的事件驱动框架,那么使它们也成为一个反应器模式框架呢? 如何区分这两个? 或者他们是一样的?
我越来越多地听到Python的Twisted框架和其他框架比较苍白。 任何人都可以对此有所了解,并可能将Twisted与其他networking编程框架进行比较。
我正试图开始学习套接字服务器创build扭曲。 我想添加一些有用的function(如身份validation,也许还有一些)。 也许有人可以指点我一个很好的教程,这将帮助我开始(+也许一些其他的想法)
(很久以前)我写了一个multithreading的web-spider来同时启用并发请求。 那是在我的Python青年时代,在我知道GIL以及它为multithreading代码(IE,大多数时候东西刚刚结束了序列化! 我想重写这个代码,使其更强大,性能更好。 基本上有两种方法可以做到这一点:我可以在2.6+中使用新的多处理模块 ,或者我可以使用某种基于反应器/事件的模型。 我宁愿做后来的事,因为它简单得多,也不太容易出错。 所以这个问题涉及到哪个框架最适合我的需求。 以下是我所知道的选项列表: 扭曲 :Python反应器框架的爷爷:看起来很复杂,有点臃肿。 陡峭的学习曲线为一个小任务。 Eventlet :来自lindenlab的家伙。 基于Greenlet的框架,面向这些types的任务。 我看了一下代码,它不太漂亮:非pep8兼容,分散打印(为什么人们在一个框架中做这个?),API似乎有点不一致。 PyEv :不成熟,现在似乎没有人使用它,虽然它是基于libevent,所以它有一个坚实的后端。 asyncore :从stdlib:über低级,看起来像是很多legwork只涉及到一些东西。 龙卷风 :虽然这是一个面向服务器的产品devise服务器dynamic网站,它具有asynchronousHTTP客户端和一个简单的ioloopfunction 。 看起来它可以完成工作,但不是它的目标。 不幸的是,在Windows上不能运行,这对我来说很重要 – 这是我支持这个蹩脚平台的要求] 有什么我错过了吗? 当然,必须有一个图书馆,适合一个简化的asynchronousnetworking库的甜点! 非常感谢intgr指向这个页面的指针。 如果你滚动到底部,你会看到有一个非常好的项目列表,旨在以这样或那样的方式来解决这个任务。 事实上,自从Twisted诞生以来事情确实已经发生了变化:现在人们似乎喜欢基于协同程序的解决scheme,而不是传统的反应器/callback定向解决scheme。 这种方法的好处是更直接的代码:我以前肯定发现,特别是在C ++中使用boost.asio时,基于callback的代码可能会导致难以遵循的devise,并且相对比较模糊未经训练的眼睛。 使用协同例程可以让你编写至less看起来更加同步的代码。 我想现在我的任务是弄清楚我喜欢这些图书馆中的哪一个,然后放弃它! 很高兴我现在问…] 任何关注这个问题的人或许会对此感兴趣,或者在任何意义上关心这个话题:我发现了一个关于这个工作可用工具当前状态的非常好的写法]
我目前有一个非常简单的用Django编写的Web应用程序,我想在我的应用程序中实现类似callback/推送通知服务的东西。 例如:当一个用户(客户端)将照片上载到服务器时,服务器会通知所有其他连接的用户有关该照片。 我想我可以使用Django的信号产生一个callback,当用户上传一张照片,但我怎么让Django发布通知给其他用户? 这个通知可以是提醒,或者简单地将其他用户redirect到显示上传图片的新html。 我宁愿后者。 我是networking编程的初学者,所以我不确定这是否符合这个法案,因为需要一个实时的web应用程序来实现像comet或long-polling这样的事情。 我的应用程序类似于聊天应用程序,除了我不提交文本文件,但图像文件。 正因为如此,我认为彗星解决scheme将起作用。 我已经尝试了很长一段时间看轨道和扭曲,但没有与Django实现它的运气,可能是因为我不明白如何完成我想要的彗星解决scheme。 我希望更有经验的程序员指出,为了完成这个任务,或者我要走向正确的方向(彗星),我究竟需要什么。 我真的很感激,如果有人可以给我一些技巧和提示,如何继续,以及教程链接或指南。