ChannelListen[channel]
开始监听指定信道.
ChannelListen[channel,func]
对和信道收到的消息相对应的关联应用 funcl.
ChannelListen[channel,None]
保存信道收到的每条消息,不对其应用任何函数.
ChannelListen[url]
在指定的 URL 上监听,存储收到的消息,而无需在信道代理上存在显式信道.
ChannelListen
ChannelListen[channel]
开始监听指定信道.
ChannelListen[channel,func]
对和信道收到的消息相对应的关联应用 funcl.
ChannelListen[channel,None]
保存信道收到的每条消息,不对其应用任何函数.
ChannelListen[url]
在指定的 URL 上监听,存储收到的消息,而无需在信道代理上存在显式信道.
更多信息和选项
- ChannelListen[…] 给出 ChannelListener 对象.
- 在 ChannelListen[channel,…] 中,可以用信道对象或在 ChannelObject 中使用的任何形式来指定 channel.
- ChannelListen[channel] 等价于 ChannelListen[channel,Automatic].
- 如果在 ChannelListen[channel,func] 中被指定,func 会覆盖 channel 的 "MessageReceived" 处理函数. 它将和含有以下元素的关联一起被调用:
-
"Message" 消息的内容 "MessageID" 唯一的消息 ID "Timestamp" 消息的服务器时间戳 "RequesterWolframID" 发送者的 Wolfram ID "RequesterWolframUUID" 发送者的 Wolfram UUID "ListenerID" 当前监听器的 ID - 如果消息是字符串、Real、Integer、ByteArray、True、False、Null、Image 或 Image3D,或此类对象的列表或关联,则从字面上给出消息的内容. 所有其他消息都以 HoldComplete[DisableFormatting[expr]]的形式给出,或者以形如 "name"DisableFormatting[val]的延迟规则的列表或关联形式给出.
- 为安全起见,在存取未经运算的消息的内容时要格外小心,比如保留表达式的部分、延迟规则的右手侧,或对字符串消息应用 ToExpression.
- ChannelListen 接受下列选项:
-
AutoRemove False 在收到一条消息后是否移除监听器 ChannelBase $ChannelBase 假定的缺省信道基 ChannelHistoryLength 100 在监听器缓存中存储多少消息 NotificationFunction Inherited 当消息到达时发出的提醒 - 可以用 RemoveChannelListener 移除 ChannelListen 设置的信道监听器.
- 移除信道监听器时将丢弃该监听器缓存的消息.
- 终止 Wolfram 语言进程将清除所有活动的信道监听器.
范例
打开所有单元 关闭所有单元基本范例 (2)
channel = CreateChannel["example"]listener = ChannelListen[channel]ChannelSend[channel, "hello"]listener["Message"]RemoveChannelListener[listener]DeleteChannel[channel]CreateChannel["speak"];
listener = ChannelListen["speak", Speak[#Message]&]ChannelSend["speak", "hello"]消息同时被记录在 ChannelListener 对象中:
listener["Message"]RemoveChannelListener[listener]DeleteChannel["speak"]范围 (4)
信道规范 (2)
监听由 ChannelObject 定义的信道:
CreateChannel["x"];
ChannelObject["x"]ChannelListen[%]ChannelListen["x"]$WolframID <> ":x"ChannelListen[%]URLBuild[{$ChannelBase, "users", $WolframID, "x"}]ChannelListen[%]DeleteChannel["x"]channel = CreateChannel[];
url = URLBuild[Information[channel, {"ChannelBase", "Path"}]]ChannelListen[url]DeleteChannel[channel]处理函数 (2)
CreateChannel["x"];
listener = ChannelListen["x", Print]ChannelSend["x", "message"]DeleteChannel["x"]CreateChannel["x"];
listener = ChannelListen["x"]listener["HandlerFunction"]ChannelSend["x", "hello"]listener["Message"]DeleteChannel["x"]选项 (3)
AutoRemove (1)
CreateChannel["x"];listener = ChannelListen["x", AutoRemove -> True]ChannelListeners[]ChannelSend["x", "message"]ChannelListeners[]DeleteChannel["x"]ChannelHistoryLength (1)
创建信道监听器,其中 ChannelHistoryLength 设定为 10:
channel = CreateChannel[];
listener = ChannelListen[channel, ChannelHistoryLength -> 10]Do[ChannelSend[channel, i], {i, 1, 20}]listener["Message", All]DeleteChannel[channel];应用 (4)
Email (1)
CreateChannel["mailSpeak"];
listener = ChannelListen[
"mailSpeak",
Speak[StringTemplate["From `from`, message: `msg`"][#Message]]&,
Permissions -> <|"Owner" -> {"Read", "Execute"}, "All" -> "Write"|>
]生成一个 MailReceiverFunction,将收到的信件转发到你的监听器:
cloudObj = CloudDeploy@With[{user = $WolframID},
MailReceiverFunction[ChannelSend[
user <> ":" <> "mailSpeak",
<|"msg" -> #Subject, "from" -> #From|>
]&]
]address = "EmailAddress" /. (MetaInformation /. Options[cloudObj, MetaInformation])SendMail[<|"To" -> address, "Subject" -> "Hello There"|>];DeleteChannel["mailSpeak"];远程评估 (1)
在你的 Wolfram 云账户,或其他远程 Wolfram 系统,设置一个对收到的消息进行评估的监听器,并将结果发送到指定信道:
CreateChannel["remote"];
ChannelListen["remote", ChannelSend[#Message["ReplyTo"], #Message["Evaluate"]]&]CreateChannel["local"];
listener = ChannelListen["local"]ChannelSend["remote", <|"Evaluate" :> {$OperatingSystem, $MachineID}, "ReplyTo" -> Information[listener["ChannelObject"], "Path"]|>]listener["Message"]{$OperatingSystem, $MachineID}DeleteChannel[{"remote", "local"}]Wolfram Cloud (1)
ChannelListen 允许您当前的会话从 Wolfram Cloud 中执行的 APIFunction、FormFunction 和其他函数接收更新:
CreateChannel["api"];
listener = ChannelListen["api"]Dynamic[listener["Dataset"]]部署一个网页,执行简单操作,并将结果以及一些元数据发送到监听器:
CloudDeploy[FormPage[{"x" -> "Integer"}, With[{user = $WolframID}, Module[{result = #x + 1}, ChannelSend[user <> ":" <> "api", <|"input" -> #x, "result" -> result, "from" -> $RequesterAddress|>];result]&]]]DeleteChannel["api"];社交媒体 (1)
创建一个 APIFunction,将 HTTP 请求的内容转发到信道:
channel = CreateChannel["TwitterMathematicaMentions"];
api = CloudDeploy[APIFunction[
{"from" -> "String", "text" -> "String"},
ChannelSend["TwitterMathematicaMentions", <|##|>]&
], Permissions -> "Public"]创建一个 IFTTT 小程序,该程序跟踪 Twitter上对 "Mathematica" 一词的提及,并通过 HTTP 将其发送给 APIFunction:
listener = ChannelListen[channel]创建与 Twitter 的服务连接,并发送包含关键字的推文:
twitter = ServiceConnect["Twitter", "New"]twitter["Tweet", "Message" -> "I am sending this tweet from Mathematica!"]listener["Message", All]DeleteChannel[channel];属性和关系 (3)
ChannelListen 返回 ChannelListener 对象:
CreateChannel["x"];
listener = ChannelListen["x"]listener["URL"]DeleteChannel["x"];用 RemoveChannelListener 清除 ChannelListener 对象:
CreateChannel["x"];
listener = ChannelListen["x"]RemoveChannelListener[listener]DeleteChannel["x"];在桌面 Wolfram 系统上,在消息处理程序函数中执行的 Print 的输出定向到 Messages 窗口:
CreateChannel["x"];
ChannelListen["x", Print[#Message]&]ChannelSend["x", "here we are"]DeleteChannel["x"];可能存在的问题 (1)
$WolframIDChannelListen["another@example.com:listen"]
如果你信得过信道拥有者在你的计算机上执行消息处理函数,那你可以暂时去掉安全设置:
Unprotect[$AllowExternalChannelFunctions];
$AllowExternalChannelFunctions = True;ChannelListen["another@example.com:listen"]$AllowExternalChannelFunctions = False;
Protect[$AllowExternalChannelFunctions];巧妙范例 (1)
开始监听一个信道,并设置在数据点到达的时候,将他们即时绘制出来:
CreateChannel["p"];
listener = ChannelListen["p"]Dynamic[ListLinePlot[If[AssociationQ[#], Lookup[#, "points"], {}]&@listener["Message"]]]从当前会话或连接到互联网的任何其他 Wolfram 语言会话发送数据到信道的网址:
ChannelSend["p", <|"points" -> RandomReal[{0, 1}, 100]|>]task = SessionSubmit[ScheduledTask[ChannelSend["p", <|"points" -> RandomReal[{0, 1}, 100]|>], 1]]TaskRemove[task]DeleteChannel["p"];文本
Wolfram Research (2016),ChannelListen,Wolfram 语言函数,https://reference.wolfram.com/language/ref/ChannelListen.html (更新于 2020 年).
CMS
Wolfram 语言. 2016. "ChannelListen." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2020. https://reference.wolfram.com/language/ref/ChannelListen.html.
APA
Wolfram 语言. (2016). ChannelListen. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/ChannelListen.html 年
BibTeX
@misc{reference.wolfram_2026_channellisten, author="Wolfram Research", title="{ChannelListen}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/ChannelListen.html}", note=[Accessed: 12-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_channellisten, organization={Wolfram Research}, title={ChannelListen}, year={2020}, url={https://reference.wolfram.com/language/ref/ChannelListen.html}, note=[Accessed: 12-August-2026]}