我正在开发一个Web应用程序,它将任务提交给主/工作系统,该系统将任务分配给一系列工作器实例中的任何一个.工作队列主服务器作为单独的进程运行(在一台单独的机器上),任务通过HTTP/REST请求提交给主服务器.将任务提交到工作队列后,客户端应用程序可以提交另一个HTTP请求以获取有关任务的状态信息.
对于我的Web应用程序,我希望它提供某种进度条视图,为用户提供有关任务处理进度的指示.实现这一点的显而易见的方法是使用AJAX进度计小部件,该小部件定期轮询工作队列以查找已提交任务的状态.我的问题是,如果没有频繁的民意调查,有没有更好的方法来实现这一目标?
我已经考虑过让客户端Web应用程序打开一个服务器套接字,它可以监听来自工作主机的通知.我的另一个类似想法是使用XMPP或类似的协议进行状态通知.(当然,主/工作系统需要更新以提供通知,但我拥有代码,因此可以自己进行任何必要的更新.)
有关建立这样的通知系统的最佳方法的任何想法?额外的努力是值得的,还是简单的轮询解决方案?
我正在尝试编写一个跨平台的GUI应用程序,该应用程序将部署到Windows,Mac OS X和Linux.我的要求是:
基于这些要求,我将工具包的选择范围缩小到了Qt和wxWidgets,因为我所知道的其他工具包(包括Java的Swing和SWT,Flex,AIR等)都没有满足"本机外观"的要求.需求.在这两个最终竞争者中,Qt似乎为我在所有三个部署平台上看起来和感觉都是原生的应用程序提供了更好的支持,但我愿意考虑相反的意见.
我宁愿不使用C++作为实现语言,但我不确定是否有任何实际的替代方案.我最担心的是使用C++以外的实现语言是部署问题.正如Ars Technica文章中所讨论的,PyQt在任何实际意义上都不符合"简单部署"的要求,我怀疑Qt的大多数其他语言绑定都会遇到相同的部署问题(至少在Mac OS X上). (或Scala)与QtJambi?QtRuby?wxPython?
有没有人知道满足上述三个要求的语言和工具包的任何组合?
我正在寻找跨平台的C++主/工作库或工作队列库.一般的想法是我的应用程序将创建某种Task或Work对象,将它们传递给工作主服务器或工作队列,这反过来又会在单独的线程或进程中执行工作.为了提供一些上下文,应用程序是一个CD开膛手,我想要并行化的任务是"rip track","将WAV编码为Mp3"等.
我的基本要求是:
如果这个库也是特别好的:
通过类比,我正在寻找类似于Java的ExecutorService或其他类似的线程池库,但是在跨平台的C++中.有谁知道这样的野兽?
谢谢!
我正在用C++和Qt构建一个CD ripper应用程序.我想并行化应用程序,以便可以同时编码多个轨道.因此,我以这样的方式构建应用程序,即对轨道进行编码是一个"任务",我正在研究一种机制来同时运行一些这些任务.当然,我可以使用线程完成此任务并编写自己的任务队列或工作管理器,但我认为英特尔的线程构建模块(TBB)可能是一个更好的工具.不过,我有几个问题.
感谢您提供的任何见解.
我试图弄清楚如何在Elixir类型和函数规范中组合参数化类型和类型变量.举个简单的例子,假设我正在定义一个Stack
模块:
defmodule Stack do
@type t :: t(any)
@type t(value) :: list(value)
@spec new() :: Stack.t
def new() do
[]
end
# What should the spec be?
def push(stack, item) do
[item|stack]
end
end
Run Code Online (Sandbox Code Playgroud)
使用第3行的参数化类型规范,我可以定义一个函数来创建一个只应包含整数的新堆栈:
@spec new_int_stack() :: Stack.t(integer)
def new_int_stack(), do: Stack.new
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.现在我想确保只有整数可以推入这个堆栈.例如,透析器应该没问题:
int_stack = new_int_stack()
Stack.push(int_stack, 42)
Run Code Online (Sandbox Code Playgroud)
但是透析器应该抱怨这个:
int_stack = new_int_stack()
Stack.push(int_stack, :boom)
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚push
函数的类型规范应该强制执行什么.在Erlang中,我很确定这种语法可以解决这个问题:
-spec push(Stack, Value) -> Stack when Stack :: Stack.t(Value).
Run Code Online (Sandbox Code Playgroud)
有没有办法用Elixir表达这个约束@spec
?
在我正在进行的Clojure练习中,我有几个多方法,所有这些方法都只identity
用作调度函数.例如:
(defmulti amount identity)
(defmulti bottles identity)
(defmulti pronoun identity)
(defmulti action identity)
(defmulti pred identity)
Run Code Online (Sandbox Code Playgroud)
由于它们都使用相同的identity
函数进行调度,我想迭代名称并调用defmulti
每个名称而不是重复defmulti
调用.我试过这个:
(doseq [m '(amount bottles pronoun action pred)]
(defmulti m identity))
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,似乎defmulti
没有正确的效果,就像我后来defmethod
用于任何多方法名称时,我得到一个错误,如:
(defmethod amount 0 [n] "whatever")
CompilerException java.lang.RuntimeException: Unable to resolve symbol: amount in this context, compiling:(NO_SOURCE_PATH:1:1)
Run Code Online (Sandbox Code Playgroud)
是否有可能迭代一个符号或名称列表并调用defmulti
它们中的每一个,如果是这样,它怎么能完成?
c++ ×2
concurrency ×2
qt ×2
ajax ×1
clojure ×1
desktop ×1
dialyzer ×1
elixir ×1
http ×1
multimethod ×1
rest ×1
tbb ×1
threadpool ×1
types ×1
wxwidgets ×1