问题标签 [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.

0 投票
1 回答
1030 浏览

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,并触发它的回调。但是,如果我想创建多个连接,这显然会失败。

问题是我看不到任何其他方法可以将我在调用之前创建的 DeferredconnectSSLconnectionMade稍后创建的关联。

0 投票
2 回答
1860 浏览

javascript - 在javascript中的协作线程意义上是否有正确的“屈服”方法?

我正在编写一个无处不在的插件,ajax 查询的长函数回调阻塞了 GUI 线程,导致 firefox 锁定。

显而易见的解决方案似乎是使用某种延迟执行(即,我们希望定期将执行此查询功能的执行添加到事件队列的末尾,然后允许执行其他命令。

我能想到的唯一方法是使用超时为零的 settimeout ......这是保证工作,还是有更好的方法来做到这一点。

0 投票
4 回答
1445 浏览

winapi - 是否可以在 Reactor 式操作中使用 IOCP(或其他 API)?

是否有任何可扩展的 Win32 API(如 IOCP 而不是 select)可以在套接字上为您提供反应器式操作?AFAIK IOCP 允许您接收有关已完成操作的通知,例如读取或写入数据(前摄器),但我正在寻找反应器风格的操作:我需要在套接字可读或可写(反应器)时获得通知。

类似于 epoll、kqueue 的东西/dev/poll

Win32中有这样的API吗?如果是这样,我在哪里可以找到它的手册?

** 澄清:** 我需要select像 IOCP 一样可扩展的套接字 API,或者我正在寻找一种在类似反应器的操作中使用 IOCP 的方法。

更详细的说明: IOCP 允许您在给定操作完成时收到通知。例如:

所以我在手术完成会收到通知——监考式的操作。

我需要的是这样的:

我怎样才能做到这一点?

0 投票
1 回答
4350 浏览

python - 烦人的 Twisted Python 问题

出于个人兴趣,我试图回答以下问题: 在 Python 中发送 100,000 个 HTTP 请求的最快方法是什么?

这就是我到目前为止所提出的,但我正在经历一些非常奇怪的事情。

installSignalHandlersTrue时,它​​只是挂起。我可以看到DelayedCall实例在reactor._newTimedCalls,但从processResponse未被调用。

installSignalHandlersFalse时,它​​会引发错误并正常工作。

这是当 installSignalHandlers 为 True 时引发的错误:(注意:这是预期的行为!问题是为什么当 installSignalHandlers 为 False 时它不起作用。)

我做错了什么,正确的方法是什么?我是扭曲的新手。

@moshez:谢谢。它现在有效:

0 投票
1 回答
1380 浏览

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() 根本不起作用,给我:

另外我问你对应用程序设计的看法,这对你有意义吗?

0 投票
2 回答
3070 浏览

python - twisted.internet.reactor 是全球性的吗?

例如,如果一个应用程序这样做from twisted.internet import reactor,而另一个应用程序也这样做,那么它们reactors是否相同?

我之所以问是因为Deluge是一个使用 twisted 的应用程序,它看起来像是使用反应器将他们的 UI(gtk)连接到由 twisted 驱动的应用程序的其余部分(我试图了解源代码)。例如,当 UI 关闭时,它只是调用reactor.stop().

这就是它的全部吗?这对我来说似乎有点神奇。如果我想运行另一个使用 twisted 的应用程序怎么办?

0 投票
2 回答
8793 浏览

python - 通过线程(或替代方式)在一个应用程序中使用多个反应器(主循环)

我有一个想法,我想开发一个应用程序,以了解更多关于TwistedWebSockets的信息。我正在考虑将以前编写的 IRC Bot 集成到 Web 应用程序中。据我所知,我需要三个反应器才能使其工作:

  • 主反应器:Web 服务器 (HTTP)。这将是您的平均 twisted.web 应用程序。当你访问它时,你可以 POST 一个 IRC 服务器/频道来连接。然后,Web 服务器将与不同线程中的不同反应器对话,即...
  • 二级反应堆:IRC Bot。这将是一个通过 Twisted IRC 客户端协议运行的 IRC 机器人。它会加入一个频道,每当有人说什么时,它就会获取该数据并将其推送到另一个反应器,在另一个线程上,这是......
  • 第三反应堆:WebSocket 服务器(WS):由于 WebSockets 不使用常规的 HTTP 协议,它们需要自己的服务器(或者看起来是这样,看看这样的例子当 IRC 机器人收到消息时,它告诉 WebSocket服务器将该消息推送到连接的客户端。

在我看来,这是有道理的。这似乎是可能的。有没有人有多个反应器在单独的线程中运行的例子,或者这是我想象的在当前的 Twisted 化身中无法完成的事情。

是否可以(或应该)进行任何架构更改以最小化反应器数量等?

谢谢你的帮助。

0 投票
1 回答
1152 浏览

python - 在 Twisted 中访问从 ClientFactory 创建的所有对象?

我正在开发一个基本的 Twisted 应用程序,以帮助我了解反应器如何与多个服务一起工作。我希望我的脚本执行的基本大纲如下:

我的脚本既是 Web 服务器又是 IRC 客户端。每次向 Web 服务器发出请求时,脚本都应该在 IRC 上显示一条消息。

我有一个 IRC 客户端工作,一个 twisted.web 服务器工作,并且可以让它们在一个脚本中同时运行。当我试图让它们相互交互时,就会出现问题。这是我启动服务器/客户端的方式:

使用上面的代码,我的客户端的两个部分同时运行没有问题。然而,当试图让 IRC 客户端根据 HTTP 请求向服务器发送消息时,我意识到我实际上并没有引用 IRCBot 实例,因为我使用 IRCBotFactory 启动反应器并让 Twisted 处理实际机器人的初始化目的。

有没有办法在 Twisted 中获取工厂的所有子实例,或者我有另一种方法来启动 IRC 客户端(可能绕过工厂并简单地使用 IRCBot 实例)?

0 投票
2 回答
5599 浏览

twisted - twisted - 通过 KeyboardInterrupt 的中断回调

我目前正在使用 Twisted 在回调内的 for 循环中重复一项任务,但如果用户通过 Ctrl-C 发出 KeyboardInterrupt,我希望反应器在回调(一个)中中断循环。根据我的测试,反应器仅在回调结束时停止或处理中断。

有没有办法在回调运行过程中向回调或错误处理程序发送 KeyboardInterrupt?

干杯,

克里斯

0 投票
3 回答
421 浏览

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

: 450



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响应中有什么内容?