问题标签 [reactor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 使用 Twisted,“connectionMade”如何触发特定的 Deferred?
这是一个更大计划的一部分;我将仅解释相关部分。基本上,我的代码想要创建到远程主机的新连接。这应该返回一个 Deferred,一旦建立连接就会触发,所以我可以在上面发送一些东西。
我正在与twisted.internet.interfaces.IReactorSSL.connectSSL
. 这会调用buildProtocol
我的ClientFactory
实例来获取一个新的连接 ( twisted.internet.protocol.Protocol
) 对象,并返回一个twisted.internet.interfaces.IConnector
. 当连接开始时,Twisted 调用startedConnecting
工厂,给它一个IConnector
. 当实际建立连接时,将调用协议的connectionMade
回调,不带任何参数。
现在,如果每个主机/端口只需要一个连接,其余的就很容易了。在调用 之前connectSSL
,我会创建一个 Deferred 并将其放入以(主机、端口)为键的字典中。然后,在协议的 connectionMade 中,我可以使用self.transport.getPeer()
它来检索主机/端口,用它来查找 Deferred,并触发它的回调。但是,如果我想创建多个连接,这显然会失败。
问题是我看不到任何其他方法可以将我在调用之前创建的 DeferredconnectSSL
与connectionMade
稍后创建的关联。
javascript - 在javascript中的协作线程意义上是否有正确的“屈服”方法?
我正在编写一个无处不在的插件,ajax 查询的长函数回调阻塞了 GUI 线程,导致 firefox 锁定。
显而易见的解决方案似乎是使用某种延迟执行(即,我们希望定期将执行此查询功能的执行添加到事件队列的末尾,然后允许执行其他命令。
我能想到的唯一方法是使用超时为零的 settimeout ......这是保证工作,还是有更好的方法来做到这一点。
winapi - 是否可以在 Reactor 式操作中使用 IOCP(或其他 API)?
是否有任何可扩展的 Win32 API(如 IOCP 而不是 select)可以在套接字上为您提供反应器式操作?AFAIK IOCP 允许您接收有关已完成操作的通知,例如读取或写入数据(前摄器),但我正在寻找反应器风格的操作:我需要在套接字可读或可写(反应器)时获得通知。
类似于 epoll、kqueue 的东西/dev/poll
?
Win32中有这样的API吗?如果是这样,我在哪里可以找到它的手册?
** 澄清:** 我需要select
像 IOCP 一样可扩展的套接字 API,或者我正在寻找一种在类似反应器的操作中使用 IOCP 的方法。
更详细的说明: IOCP 允许您在给定操作完成时收到通知。例如:
所以我在手术完成后会收到通知——监考式的操作。
我需要的是这样的:
我怎样才能做到这一点?
python - 烦人的 Twisted Python 问题
出于个人兴趣,我试图回答以下问题: 在 Python 中发送 100,000 个 HTTP 请求的最快方法是什么?
这就是我到目前为止所提出的,但我正在经历一些非常奇怪的事情。
当installSignalHandlers为True时,它只是挂起。我可以看到DelayedCall
实例在reactor._newTimedCalls
,但从processResponse
未被调用。
当installSignalHandlers为False时,它会引发错误并正常工作。
这是当 installSignalHandlers 为 True 时引发的错误:(注意:这是预期的行为!问题是为什么当 installSignalHandlers 为 False 时它不起作用。)
我做错了什么,正确的方法是什么?我是扭曲的新手。
@moshez:谢谢。它现在有效:
python - 让 PyQt 应用程序控制一切。反应堆怎么用?
我有一个 django 应用程序,通过 Twisted 提供服务,它还提供其他服务(主要是三个套接字)。
我需要让它在 Windows 下工作,我决定编写一个 PyQt4 应用程序,它的作用与Windows 的Apache Service Monitor非常相似。
我无法将扭曲的反应器连接到 pyqt 应用程序反应器,因此也欢迎任何关于此的提示。
现在我有这种架构:
- QMainWindow在 __ init __() 中具有 log.addObserver(callBack) 函数和小部件。
- Twisted 初始化器类,它扩展了 QtCore.QThread并在不同的线程中工作。
- 在 Twisted 上运行的 django 应用程序。
我需要了解如何运行反应器,因为从QtCore.QThread调用 reactor.start() 根本不起作用,给我:
另外我问你对应用程序设计的看法,这对你有意义吗?
python - twisted.internet.reactor 是全球性的吗?
例如,如果一个应用程序这样做from twisted.internet import reactor
,而另一个应用程序也这样做,那么它们reactors
是否相同?
我之所以问是因为Deluge是一个使用 twisted 的应用程序,它看起来像是使用反应器将他们的 UI(gtk)连接到由 twisted 驱动的应用程序的其余部分(我试图了解源代码)。例如,当 UI 关闭时,它只是调用reactor.stop()
.
这就是它的全部吗?这对我来说似乎有点神奇。如果我想运行另一个使用 twisted 的应用程序怎么办?
python - 通过线程(或替代方式)在一个应用程序中使用多个反应器(主循环)
我有一个想法,我想开发一个应用程序,以了解更多关于Twisted和WebSockets的信息。我正在考虑将以前编写的 IRC Bot 集成到 Web 应用程序中。据我所知,我需要三个反应器才能使其工作:
- 主反应器:Web 服务器 (HTTP)。这将是您的平均 twisted.web 应用程序。当你访问它时,你可以 POST 一个 IRC 服务器/频道来连接。然后,Web 服务器将与不同线程中的不同反应器对话,即...
- 二级反应堆:IRC Bot。这将是一个通过 Twisted IRC 客户端协议运行的 IRC 机器人。它会加入一个频道,每当有人说什么时,它就会获取该数据并将其推送到另一个反应器,在另一个线程上,这是......
- 第三反应堆:WebSocket 服务器(WS):由于 WebSockets 不使用常规的 HTTP 协议,它们需要自己的服务器(或者看起来是这样,看看这样的例子。当 IRC 机器人收到消息时,它告诉 WebSocket服务器将该消息推送到连接的客户端。
在我看来,这是有道理的。这似乎是可能的。有没有人有多个反应器在单独的线程中运行的例子,或者这是我想象的在当前的 Twisted 化身中无法完成的事情。
是否可以(或应该)进行任何架构更改以最小化反应器数量等?
谢谢你的帮助。
python - 在 Twisted 中访问从 ClientFactory 创建的所有对象?
我正在开发一个基本的 Twisted 应用程序,以帮助我了解反应器如何与多个服务一起工作。我希望我的脚本执行的基本大纲如下:
我的脚本既是 Web 服务器又是 IRC 客户端。每次向 Web 服务器发出请求时,脚本都应该在 IRC 上显示一条消息。
我有一个 IRC 客户端工作,一个 twisted.web 服务器工作,并且可以让它们在一个脚本中同时运行。当我试图让它们相互交互时,就会出现问题。这是我启动服务器/客户端的方式:
使用上面的代码,我的客户端的两个部分同时运行没有问题。然而,当试图让 IRC 客户端根据 HTTP 请求向服务器发送消息时,我意识到我实际上并没有引用 IRCBot 实例,因为我使用 IRCBotFactory 启动反应器并让 Twisted 处理实际机器人的初始化目的。
有没有办法在 Twisted 中获取工厂的所有子实例,或者我有另一种方法来启动 IRC 客户端(可能绕过工厂并简单地使用 IRCBot 实例)?
twisted - twisted - 通过 KeyboardInterrupt 的中断回调
我目前正在使用 Twisted 在回调内的 for 循环中重复一项任务,但如果用户通过 Ctrl-C 发出 KeyboardInterrupt,我希望反应器在回调(一个)中中断循环。根据我的测试,反应器仅在回调结束时停止或处理中断。
有没有办法在回调运行过程中向回调或错误处理程序发送 KeyboardInterrupt?
干杯,
克里斯
java - http服务器实现,页面无法正常显示
好吧,因为我正在做一个编码 http 服务器的小项目。代码在
http://code.google.com/p/reactor/
当前的难题是当被要求用 java 脚本和 css 解析页面时。作为一个 http 服务器,它只发送一个页面(从另一个网站复制)并且解析不正确。当一个简单的html页面被我的firefox解析时,它显示正常,但是当解析一个更复杂的页面(css + javascript)时,页面都是这样连接的:
bottom:10px;}body>div#divToplayerSmall{position:fixed;}ראשי|תוצאותLIVE|הימוריספורט|ONEבסלולרי|ONETV |גליצ'ים|BigONE|טוטוווינר| CrazyONE |
html的源代码是:
clientWidth:document.body.clientWidth)+(ignoreMe2=document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft))+'px');top:expression((0-divToplayerSmall.offsetHeight+(document. documentElement.clientHeight?document.documentElement.clientHeight:document.body.clientHeight)+(ignoreMe=document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop))+'px');}varisTopTrans=(ToplayerBigPath .indexOf("透明")>-1)?false:true;varisRemTrans=(ToplayerSmallPath.indexOf("透明")>-1)?false:true;vartop1session=3;vartop2session=5;InitToplayer(isTopTrans,isRemTrans) ;window.onload=StartToplayer;ראשי|תוצאותLIVE|הימוריספורט|ONEבסלולרי|ONETV |גליצ'ים|BigONE|טוטוווינר| CrazyONE | documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft))+'px');top:expression((0-divToplayerSmall.offsetHeight+(document.documentElement.clientHeight?document.documentElement.clientHeight:document.body. clientHeight)+(ignoreMe=document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop))+'px');}varisTopTrans=(ToplayerBigPath.indexOf("transparent")>-1)?false: true;varisRemTrans=(ToplayerSmallPath.indexOf("transparent")>-1)?false:true;vartop1session=3;vartop2session=5;InitToplayer(isTopTrans,isRemTrans);window.onload=StartToplayer;ראשי|תוצאותLIVE|הימוריספורט|ONEבסלול |ONETV |גליצ'ים|BigONE|טוטוווינר| CrazyONE | documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft))+'px');top:expression((0-divToplayerSmall.offsetHeight+(document.documentElement.clientHeight?document.documentElement.clientHeight:document.body. clientHeight)+(ignoreMe=document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop))+'px');}varisTopTrans=(ToplayerBigPath.indexOf("transparent")>-1)?false: true;varisRemTrans=(ToplayerSmallPath.indexOf("transparent")>-1)?false:true;vartop1session=3;vartop2session=5;InitToplayer(isTopTrans,isRemTrans);window.onload=StartToplayer;ראשי|תוצאותLIVE|הימוריספורט|ONEבסלול |ONETV |גליצ'ים|BigONE|טוטוווינר| CrazyONE | offsetHeight+(document.documentElement.clientHeight?document.documentElement.clientHeight:document.body.clientHeight)+(ignoreMe=document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop))+'px');} varisTopTrans=(ToplayerBigPath.indexOf("透明")>-1)?false:true;varisRemTrans=(ToplayerSmallPath.indexOf("透明")>-1)?false:true;vartop1session=3;vartop2session=5;InitToplayer( isTopTrans,isRemTrans);window.onload=StartToplayer;ראשי|תוצאותLIVE|הימוריספורט|ONEבסלולרי|ONETV |גליצ'ים|BigONE|טוטוווינר| CrazyONE | offsetHeight+(document.documentElement.clientHeight?document.documentElement.clientHeight:document.body.clientHeight)+(ignoreMe=document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop))+'px');} varisTopTrans=(ToplayerBigPath.indexOf("透明")>-1)?false:true;varisRemTrans=(ToplayerSmallPath.indexOf("透明")>-1)?false:true;vartop1session=3;vartop2session=5;InitToplayer( isTopTrans,isRemTrans);window.onload=StartToplayer;ראשי|תוצאותLIVE|הימוריספורט|ONEבסלולרי|ONETV |גליצ'ים|BigONE|טוטוווינר| CrazyONE | indexOf("透明")>-1)?false:true;varisRemTrans=(ToplayerSmallPath.indexOf("透明")>-1)?false:true;vartop1session=3;vartop2session=5;InitToplayer(isTopTrans,isRemTrans); window.onload=StartToplayer;ראשי|תוצאותLIVE|הימוריספורט|ONEבסלולרי|ONETV |גליצ'ים|BigONE|טוטוווינר| CrazyONE | indexOf("透明")>-1)?false:true;varisRemTrans=(ToplayerSmallPath.indexOf("透明")>-1)?false:true;vartop1session=3;vartop2session=5;InitToplayer(isTopTrans,isRemTrans); window.onload=StartToplayer;ראשי|תוצאותLIVE|הימוריספורט|ONEבסלולרי|ONETV |גליצ'ים|BigONE|טוטוווינר| CrazyONE |
כותרותאחרונותצפובמייקללואיסמנצחבתחרותההטבעותבגמרהתיכונים
19/01/07 19:30
אליכהןלשחקניולקראתבני-יהודה:תיראומהאסוליןעשהלמכביחיפה
19/01/07 18:43
ליגתהעלבכדורסל:המשחקיםחוזריםליוםראשון
19/01/07 17:41
דעה:שחרפארכבריכולהלהתמודדעםשחקניותצמרת
19/01/07 16:49
ארצית:הפועלר"גניצחהאתהשקמה/ רמתחן1:2,גםראשלגםראשלצנצנצחצחצחצחצחצנצנצניייי
排
注2.5מיבנטבנטבנטסמעסמענ极2.52.5ממממממממל集原19/01/07 16:37
16
: 37
ללללגתגת
:30אתאתפעלכפQuling,ללאגללאגסבאבנננננננ
集19/01/07 14
: 450
19/01/07 13:46
varswfPeleSmall=newSWFObject("http://images.one.co.il/images/PeleEmulator/emulator_pelephone_01a.swf","peleSmall",160,470,"6","#FFFFFF"); swfPeleSmall.addParam("质量","高");swfPeleSmall.addParam("wmode","透明");swfPeleSmall.write("divPeleSmall");varswfPeleBig=newSWFObject("http://images.one.co. il/images/PeleEmulator/emulator_pelephone_02d.swf","peleBig",400,470,"6","#FFFFFF");swfPeleBig.addParam("quality","high");swfPeleBig.addParam("wmode","transparent ");swfPeleBig.write("divWithBig");
פאר:לאלאלא
极תכנכנלראמח集
20077年19/01/20077:26
שחרפאררשמשחרפאררשמבבששששהה荷集原激גדשגשגשגשג集原6:3,5:7ועלטטעלטטעלטטעלטטאנאנאנגבבבבןןצרפתצרפתצרפתצרפתצרפתצרפתצרפתצרפתצרפתצרפתצרפתצרפתצרפתצרפתצרפת原荷集。
משחק,שששאמרלרלרל极ה车,集集集
אחראחראחרשפסדאת荷兰,
פארבטבטחאתעפלעפללשלבשמ集原集原(16גדגדללתתתתת集),שםתפגשםתפגשבשבתבלשבשבתבלשבשבתבללאתסבטלנאתסבטלנק集4集3בטבטרנרנרנ极,שגברשגברשגברבבבקרעלמרקרקר极4集。
פאראמרהל-
(Firefox 和页面源 html 中只有部分页面展示)
为什么会这样?http响应中有什么内容?