ZeroMQ 基础#
如何解释 ZeroMQ?有些人从它所做的一切美妙的事情开始说起。它是强化版的套接字。它就像带路由的邮箱。它非常快!其他人则试图分享他们顿悟的时刻,那种 zap-pow-kaboom 般顿悟的范式转换时刻,当一切变得显而易见时。事情变得简单起来。复杂性消失了。它开阔了思维。还有些人通过比较来解释。它更小、更简单,但看起来依然熟悉。
import anywidget
import traitlets
class CounterWidget(anywidget.AnyWidget):
_esm = """
function render({ model, el }) {
let button = document.createElement("button");
button.innerHTML = `count is ${model.get("value")}`;
button.addEventListener("click", () => {
model.set("value", model.get("value") + 1);
model.save_changes();
});
model.on("change:value", () => {
button.innerHTML = `count is ${model.get("value")}`;
});
el.classList.add("counter-widget");
el.appendChild(button);
}
export default { render };
"""
_css = """
.counter-widget button { color: white; font-size: 1.75rem; background-color: #ea580c; padding: 0.5rem 1rem; border: none; border-radius: 0.25rem; }
.counter-widget button:hover { background-color: #9a3412; }
"""
value = traitlets.Int(0).tag(sync=True)
w = CounterWidget(value=42)
w