- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个非常简单的广播/回显服务器,它使用带有 clojure 和 aleph 的 Web 套接字。
我花了很多时间查看 aleph 和 lamina 来源,以对这里发生的事情有一个体面的、基本的了解。
因此,这可以处理数据(这很棒)并格式化响应(这很棒)。我怎样才能让它只将回复发送给相关方?
(defn do-something
[arg]
(str "pickles" "are" "nice" arg))
(defn ws-handler [ch request]
(siphon (map* #(do-something %) ch) broadcast-channel)
(siphon broadcast-channel ch))
(defn -main
"Start the http server"
[& args]
(start-http-server ws-handler {:port 8080 :websocket true}))
假设我有一个 JSON 格式的请求:
{"room":32, "color":"red", "command":"do something..."}
我希望它执行“do some...”命令,然后将结果输出发送给最近命令包含 {"room":32, "color":"red"} 的其他人.
我不明白如何在 aleph 中以这种方式管理连接...有什么帮助吗?
最佳答案
如果您想要更详细地了解谁接收什么消息,您需要比“广播 channel ”更精细的东西。 Lamina 提供了一个(named-channel ...)
函数,允许您创建自己的 channel 命名空间。
这看起来像:
(defn broadcast [channel-name message]
(enqueue (named-channel channel-name nil) message))
(defn subscribe [channel-name client-channel]
(let [bridge-channel (channel)]
(siphon
(named-channel channel-name nil)
bridge-channel
client-channel)
#(close bridge-channel)))
在这种情况下,subscribe
方法确保客户端连接将从该特定 channel 接收所有消息,并返回一个将取消该订阅的函数。您需要有一些保留这些取消回调的每个客户端状态,但我将把它留给读者作为练习。
关于clojure - 基于元数据管理 Aleph (clojure) 中的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16566265/
我正在尝试基于 aleph 构建 RCP 服务器。它通过了所有测试,但是当用于发送或接收的字节数组变大时,字节似乎已损坏。 例如。我试图发送一个长度为 2936 的字节数组,但我在服务器上只收到了 1
我有以下代码: (ns alephtest.core (:use lamina.core aleph.tcp aleph.formats)) (defn connect
我编写了一个非常简单的广播/回显服务器,它使用带有 clojure 和 aleph 的 Web 套接字。 我花了很多时间查看 aleph 和 lamina 来源,以对这里发生的事情有一个体面的、基本的
我正在阅读 Aleph one 的《Smashing The Stack For Fun And Profit》,并到达了这个位置: overflow1.c ---------------------
我正在阅读“Smashing The Stack For Fun And Profit”,并找到了第一个使用环境变量的溢出示例: exploit2.c ------------------------
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: Programming Logic: Finding the smallest equation to a
在我学习 Clojure 的过程中,我目前面临着设置 websocket 通信的问题。经过许多不同的方法后,我最终使用 aleph . 我成功实现的目标: 处理新客户端连接 处理客户端断开连接 随意从
我使用 Clojure 编写了一个相对简单的 HTTP 服务器 Aleph图书馆。这不是很复杂: (ns cxpond.xmlrpc.core (:gen-class) (:require [
我从 Smashing the Stack for Fun and Profit 复制了示例 3在 Linux x86_64 上。但是我无法理解为了跳过指令应该增加到返回地址的正确字节数是多少: 0x
我的 clojure noir 应用程序在本地 100% 正常运行,并且连接到 RedisToGo 没问题。 问题是当我部署到 Heroku (git push heroku master) 时,出现
我一直在搞乱 Aleph One 的“Smash the Stack for Fun and Profit”,发现在为我的 64 位处理器编译代码时,堆栈内存没有使用通常的“sub $”分配值,%RE
我阅读有关 Clojure 的内容已经有一段时间了,我正在考虑将其作为 Node.js(我已将其用于另一个项目)的替代品。最有前途的库似乎是 Aleph/Lamina,不幸的是它没有 Node 那么多
我正在尝试使用 WARMR 在我的数据中查找频繁的关系模式;为此,我在 SWI-Prolog 中使用 ALEPH。然而,我正在努力弄清楚如何做到这一点,以及为什么我之前的尝试没有奏效。 在我继续处理我
我正在尝试使用 Aleph 编写一个简单的 TCP 服务器。一切正常,除了我不确定应该如何检测 channel 何时关闭。 来自documentation : When the client clos
我正在阅读 Aleph one 的“粉碎堆栈以获得乐趣和利润”,并到达了这个地方: jmp 0x2a # 2 bytes popl %
我正在尝试使用 aleph 连接到相互验证的 Docker 守护进程。 aleph 文档显示您可以传入 netty SSL 上下文以进行身份验证。看起来我正在正确创建 SslContext,但所有
几天前我开始学习 Clojure。我正在尝试使用一些 Aleph TCP 回显服务器示例,但我无法让服务器绑定(bind)到 tcp v4 端口。默认情况下,服务器仅绑定(bind)到 tcp v6
我是一名优秀的程序员,十分优秀!