问题标签 [event-driven]

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 回答
426 浏览

node.js - 是否有用于事件驱动应用程序的 PAAS 托管平台?

我正在寻找 PAAS 托管服务来部署我的小型事件驱动和 websocket 服务器应用程序(NodeJS、Python Twisted 等......)

0 投票
3 回答
2136 浏览

c++ - 优先级队列中的池内存分配

我正在编写一个基于事件的模拟器,其中每个事件都调用一个可以生成新事件的处理函数(节点),依此类推。时间戳与每个事件相关联,它们需要按时间增加的顺序进行处理(但事件不一定按该顺序创建)。为此,我使用了一个简单的priority_queue<Event*>,其中 Event 是一个类,其中包含指向必须调用的处理节点的指针和时间戳。

所以,一切正常,但我每秒分配和释放数百万个事件,这显然是限制我的模拟器速度的原因(大约 30% 的执行时间由 Event 对象的内存分配和释放占用)。

我发现了这个问题: 对象池与动态分配,似乎我可以从对象池中受益匪浅。虽然我已经看到 Boost 提供了一些方法来做到这一点,但我不确定这对于在priority_queue. 当谈到自定义内存分配时,我真的很迷茫。

所以我的问题是:为 my 使用对象池是否实用/有益priority_queue,如果是,是否有一种简单的方法可以做到这一点,可能有一些代码示例(或至少一个起点),最好不要立即依赖第一次使用Boost?

实际上,也欢迎一些参考来了解池分配的工作原理!

谢谢。

0 投票
6 回答
10362 浏览

c# - 帮助事件驱动的 TCP 服务器

我正在开发一个“应用程序系统”,我还需要制作一个服务器应用程序。我正在使用 C# (.NET 4.0)。服务器将主要从不同的 POS 应用程序/客户端收集数据(应该在 50-100 左右,但服务器也应该能够处理大约 200-300 个客户端)。从单个客户端,服务器每天可能会收到大约 100 倍的大约 1KB 数据。服务器主要需要接受数据,解密并存储到磁盘。它还应该检查特定目录中的更改,以便向客户端发送新配置,这不应该经常发生。

我对 C# 和服务器编程很陌生,所以请多多包涵。我考虑过使用线程池和异步方法(在“C# in a nutshell”一书中有一个很好的例子)。但是我花了很多时间寻找最佳解决方案,我发现了这一点。但就我而言,多线程带来的问题多于好处。因此,我甚至想到了驱动服务器。“单个进程,在回调中处理每个事件(接受的连接、可读取的数据、可以写入客户端……)。” 来自“什么是事件驱动的 Web 服务器”。我发现这是解决我的问题的最佳方法。

但我不知道如何编码,我找不到任何关于事件驱动服务器的例子。据我了解,我应该创建一个线程(GUI + 1),然后创建一个 TCP 侦听器,然后以某种方式创建事件,以便当 TCP 侦听器可以接受客户端时,事件会触发并唤醒服务器,当数据从客户端读取将可用它会唤醒服务器。

请帮我编写代码,我完全迷路了。我知道我怎么能做到这一点

但这不是事件驱动的,而是在浪费 CPU。服务器不会很活跃,所以我想让它尽可能高效。

一些例子真的很有帮助。

感谢您的时间和回答。

ps 我可以为所有客户端使用一个端口吗?

编辑:为了澄清,我想编写一个事件驱动的服务器,但我不知道如何,因此我只是举了一个我知道的例子(客户端轮询)。

0 投票
1 回答
4300 浏览

c++ - nodejs 与运行 libevent 有何不同?

我很好奇是什么让 nodeJS 获得了它现在获得的超级并发性。我实际上并没有太多地使用其中任何一个,只是在空闲时间玩了两个。

听起来节点承诺您可以设置它的 1000 个连接,即使使用 libevent 也可以做到这一点,比如在 C++ 中,不是吗?

0 投票
1 回答
2950 浏览

javascript - 非 DOM 对象上的 jQuery 自定义事件

我最近阅读了一些类似这样的代码:

这似乎有效。

但是我在 jQuery 文档或源代码中找不到任何关于使用既不是选择器也不是 DOM 节点的对象调用 jQuery 构造函数的内容。所以我的问题是,这是一个受支持的用途,还是它本质上是偶然的?

如果您想在 JavaScript 中为您的模型或视图对象使用事件驱动模型,您会怎么做?

0 投票
10 回答
329784 浏览

javascript - JavaScript 中的 onclick 事件函数

我在带有按钮的 HTML 页面中有一些 JavaScript 代码。我有一个click()处理onClick按钮事件的函数。按钮的代码如下:

问题是当按钮被点击时,函数没有被调用。我在这里做错了什么?

0 投票
8 回答
9817 浏览

c++ - 我想同时等待文件描述符和互斥锁,推荐的方法是什么?

我想产生线程来执行某些任务,并使用线程安全队列与它们通信。我还想在等待时对各种文件描述符进行 IO。

完成此任务的推荐方法是什么?当队列从无元素变为某些元素时,我是否必须创建一个线程间管道并写入它?没有更好的方法吗?

如果我必须创建线程间管道,为什么没有更多实现共享队列的库允许您将共享队列和线程间管道创建为单个实体?

我想这样做是否意味着根本的设计缺陷?

我在问这个关于 C++ 和 Python 的问题。我对跨平台解决方案有点兴趣,但主要对 Linux 感兴趣。

举一个更具体的例子......

我有一些代码将在文件系统树中搜索东西。我有几个通过套接字向外界开放的通信渠道。可能(或可能不会)导致需要在文件系统树中搜索内容的请求将会到达。

我将在一个或多个线程中隔离在文件系统树中搜索内容的代码。我想接受导致需要搜索树的请求,并将它们放入线程安全队列中,由搜索线程完成。结果将被放入已完成搜索的队列中。

我希望能够在搜索进行时快速处理所有非搜索请求。我希望能够及时对搜索结果采取行动。

服务传入的请求通常意味着某种事件驱动的架构,它使用epoll. 磁盘搜索请求队列和结果返回队列意味着使用互斥锁或信号量来实现线程安全的线程安全队列。

等待空队列的标准方法是使用条件变量。但是,如果我在等待时需要服务其他请求,那将不起作用。要么我最终一直轮询结果队列(平均将结果延迟轮询间隔的一半),阻塞而不为请求提供服务。

0 投票
5 回答
13326 浏览

ruby-on-rails - EventMachine 与 Node.js

我将开发一个协作站点,其中一个功能将是具有实时更改的协作编辑。即当两个或更多用户正在编辑同一个文档时,他们可以看到彼此的变化,一旦发生。我有一些使用 Ruby on Rails 的经验,所以我在考虑使用 EventMachine,但是由于围绕 Node.js 的所有这些炒作,我知道我正在考虑使用它。那么,使用 Node.js 而不是 EventMachine 的主要好处是什么?

tl;dr EventMachine 和 Node.js 之间的主要区别是什么(除了语言)?

0 投票
7 回答
7725 浏览

architecture - 编写可维护的事件驱动代码

我最近刚开始使用事件驱动架构,来自非常标准的面向对象的思维方式。

我注意到的第一件事是,理解和跟踪程序的难度似乎随着程序的大小呈指数增长。虽然小型宠物项目很容易遵循,但感觉代码会很快变成意大利面条。

我知道我是这种开发思维的新手,并不是我所有的面向对象的担忧都会继续存在。是否有任何关于编写可维护、可理解的事件驱动代码的资源?使用 node.js 或 Twisted 或 Event Machine 的人对此做了什么?

0 投票
4 回答
28040 浏览

asp.net - Node.js 的事件驱动有什么不同?我们不能在 ASP.Net 的 HttpAsyncHandler 中这样做吗?

我在 web 编程方面不是很有经验,实际上我还没有在 Node.js 中编写任何代码,只是对事件驱动的方法感到好奇。看起来确实不错。

这篇文章解释了当我们使用基于线程的方法来处理请求时可能发生的一些坏事,应该选择事件驱动的方法。在基于线程的情况下,收银员/线程一直在我们身边,直到我们的食物/资源准备好。在事件驱动中,收银员将我们发送到请求队列之外的某个位置,这样我们就不会在等待食物时阻止其他请求。要基于阻塞线程扩展,您需要增加线程数。对我来说,这似乎是不正确使用线程/线程池的一个不好的借口。

不能使用 IHttpAsyncHandler 正确处理吗?ASP.Net 接收请求,使用 ThreadPool 并运行处理程序 (BeginProcessRequest),然后在其中我们使用回调加载文件/数据库。然后该线程应该可以自由处理其他请求。一旦文件读取完成,ThreadPool 将再次被调用并执行剩余的响应。对我来说并没有太大的不同,那为什么不那么可扩展呢?

我知道的基于线程的缺点之一是,使用线程需要更多内存。但只有有了这些,您才能享受多核带来的好处。我怀疑 Node.js 根本没有使用任何线程/内核。

因此,仅基于事件驱动与基于线程(不要提出“因为它是 Javascript 和每个浏览器......”的论点),有人可以指出使用 Node.js 而不是使用 Node.js 的实际好处是什么现有的技术?

那是一个很长的问题。谢谢 :)