问题标签 [anyevent]
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.
perl - 基于 AnyEvent::Socket 的代码工作不稳定
我正在使用 AnyEvent(用于学习)创建 memcached 客户端并实现了以下代码:
但由于某种原因,此代码不稳定。输出:
我不知道为什么“get”命令一成功,然后是二。如果我使用模块 AnyEvent::Memcached,那么一切都很好:
输出:
无法理解可能是什么问题?
perl - twiggy plack anyevent 在主循环阻塞时如何处理请求?
我对 Plack、Twiggy 和 AnyEvent 很陌生,遇到了问题。
我有面向客户端的应用程序服务器,它们向后端游戏服务器发出请求。游戏服务器做了几件事。
1. 当请求从应用服务器到达时,它们对对象进行处理(例如,移动、购买、删除或启动对象)。
2. 他们定期更新所有“可移动”物体的位置(更新纬度/经度)。
为了尝试实现这一点,我设置了一个非常基本的 psgi 文件,它执行以下操作: AnyEvent 用于每两秒(重复)更新对象的纬度/经度。
handler_rpc 只是处理从应用程序服务器启动的请求,以对对象执行某些操作。为了完整起见,应用服务器上的代码如下;
在游戏服务器端,代码如下所示
这些部件单独工作。我的意思是,如果我只是担心获取和处理对游戏服务器的 RPC 请求,那么一切正常。
如果我只是使用 AnyEvent 定期更新可以正常工作的对象位置。
当我想在同一组对象上同时执行这两项操作时,就会出现问题。
它失败是因为 $cond->recv 阻塞并且我们实际上并没有到达 $app 所以 Twiggy 不处理请求或者如果我移动 $cond 行,我们启动应用程序并且 twiggy 等待来自应用程序的请求服务器,但 AnyEvent 事件不会发生(或它们发生一次)。
Twiggy 应该是非阻塞的(我认为这在这里很有用)并且在构建时考虑了 AnyEvent,所以我假设有一种方法可以做我想做的事,但是环顾了一会儿,我不是越来越远。
有没有办法使用 Twiggy、Plack 和 AnyEvent 来做到这一点,还是我走错了方向?如果这有点正确,我该如何解决?
还有另一种方法可以更好地解决这个问题吗?
正如我所说,如果我没有提供基本信息,我对此很陌生,很抱歉。请询问,我会更新我错过的任何内容。
谢谢。
multithreading - 我可以像互斥锁一样使用threads::shared模块中的锁吗?
我使用 AnyEvent 每 X 分钟触发一次事件。有些过程很长,记录在数据库中的结果有时很长(有时超过 3 秒)。我想确保只有一个函数可以同时访问我的数据库。所以我使用threads::shared模块中的锁。这是我的代码:
主要.pl:
目标用户:
但我收到此错误:“锁只能用于共享值”
你有什么想法吗?谢谢
perl - 我可以在 AnyEvent::Fork 中使用 AnyEvent->timer() 吗?
假设我使用 N 个帐户对象。
我想为N个Account创建几个fork,并独立包含一个事件AnyEvent->timer()。这是我的代码的样子:
但是在执行过程中,计时器不会启动。
相反,我试图启动一个事件 AnyEvent-> timer 我在其中创建我的 fork :
此刻,事件启动良好,但我不得不等待最后一个事件的执行才能创建下一个分叉。
你有什么想法吗?谢谢
perl - 将合成文件句柄与 EV (perl) 一起使用
我有一个由此创建的文件句柄对象(为清楚起见,稍作编辑):
我想将它与AnyEvent
. 它与 . 一起工作正常,AnyEvent::Impl::Perl
但与
AnyEvent::Impl::EV
. 我认为我已经从以下位置追踪到这种方法EV
:
我认为它没有通过SvTYPE (fh) == SVt_PVGV
测试。使用Devel::Peek
's Dump() 方法我得到:
任何有关我如何调整我的句柄的创建以使其可以通过此测试的帮助将不胜感激。
perl - AnyEvent 下的多个 telnet 客户端/命令
如果我$_->{thand}->cmd($cmd)
通过同一个 telnet 连接读取多个命令,则会断开连接。
这表现为多次调用ae_connect()
. 如何正确发送和获取数据AnyEvent
?
perl - 为什么在这个 AnyEvent::Handle 示例中没有调用 on_eof?
这是我的简单服务器。当我运行它并 telnet 到它(端口 5222)并让 telnet 退出它的连接时,为什么我的 on_eof 函数没有被调用?即为什么不是字符串“CATASTROPHE!!!” 打印?
perl - 如何在 perl plack 应用程序中实现非阻塞响应?
我正在尝试使用Twiggy::Server
(这意味着一个 plack 应用程序)编写一个基于 perl 的网络服务器。我想通过运行一些可能耗时的子例程来响应对某些数据的请求(来自网页上的 ajax 调用),该子例程生成数据,然后将其转换为 JSON 字符串以返回到客户端网页。
您可以在此处查看我的服务器的精简测试版本:http: //pastebin.com/iNaDTVwL
该示例显示了我在当前实现中面临的问题;用于AnyEvent::ForkManager
执行非阻塞部分会导致截断“大”json 响应。
该文档将完美地回答我的问题(并更好地解释我正在尝试做的事情):https ://github.com/jjn1056/Example-PlackStreamingAndNonblocking ...如果它完成了。我只是错过了做非阻塞的“正确”方式,而不是使用AnyEvent::ForkManager
它看起来有点像黑客。
perl - 如果满足某些要求,则将 AnyEvent::Log 消息转发到回调
我正在开发一个在主程序中使用 AnyEvent Log 以及几个依赖模块/包的项目。我目前让每个模块都写入它自己的上下文,并且所有上下文都作为从属添加到主程序上下文中。这个项目是一个更大项目的一部分,除了写出一个本地日志文件之外,我还想将某些消息发送到一个远程程序,该程序将负责将这些消息呈现给用户。
问题是,为了发送到远程程序,我必须有一条只能从主程序获得的信息,所以在包级别实现一个方法来发送消息是不划算的。我需要的信息或多或少是事务 id,日志消息是来自特定事务的有趣事件。
主程序有 2 个上下文( main , secondary )。我感兴趣的消息将来自辅助 ctx 或包/模块上下文之一。我只对向用户发送信息 - 暴击级别消息感兴趣,但仅当主程序中存在 txID 时。无论部署是否正在运行,我总是希望将消息写入我的本地日志文件。我希望这是我在主程序而不是模块中设置的东西,因为模块的任务是做某些事情,甚至不应该知道有一个 ID 与手头的任务相关联。
这是主程序中日志配置特定代码的快速细分。
理想情况下,我将能够使用 log_cb 和 fmt_cb 之一或两者来处理格式化消息并将消息发送到使用 log_event 子程序的远程程序。我已经尝试了一些不同的东西,到目前为止我被卡住了。
我一直在寻找比文档中更多的示例,但还没有找到太多。这并不令人惊讶,因为 AE::log 非常棒,但任何可以提供帮助的东西都将不胜感激。