ChannelListen[channel]
指定のチャネルを聞き始める.
ChannelListen[channel,func]
チャネルで受信した各メッセージに対応する連想に func を適用する.
ChannelListen[channel,None]
チャネルで受信した各メッセージを,いかなる関数も適用せずに保存する.
ChannelListen[url]
チャネルブローカ上に明示的なチャネルの存在を要求せずに,指定されたURLを聞き,受信したメッセージをソートする.
ChannelListen
ChannelListen[channel]
指定のチャネルを聞き始める.
ChannelListen[channel,func]
チャネルで受信した各メッセージに対応する連想に func を適用する.
ChannelListen[channel,None]
チャネルで受信した各メッセージを,いかなる関数も適用せずに保存する.
ChannelListen[url]
チャネルブローカ上に明示的なチャネルの存在を要求せずに,指定されたURLを聞き,受信したメッセージをソートする.
詳細とオプション
- ChannelListen[…]はChannelListenerオブジェクトを与える.
- ChannelListen[channel,…]では,channel はチャネルオブジェクトとして,あるいはChannelObject内で使われている任意の形で指定することができる.
- ChannelListen[channel]はChannelListen[channel,Automatic]に等しい.
- func は,ChannelListen[channel,func]内で指定された場合は channel の"MessageReceived"ハンドラを無効にする.channel は次の要素を含む連想によって呼ばれる.
-
"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 メッセージを1つ受信した後でリスナを削除するかどうか ChannelBase $ChannelBase 仮定するデフォルトのチャネルベース ChannelHistoryLength 100 リスナのキャッシュにいくつのメッセージを保存するか NotificationFunction Inherited メッセージが届いた際に与える通知 - ChannelListenが設定したチャネルリスナはRemoveChannelListenerで削除することができる.
- チャネルリスナを削除するとリスナがキャッシュしたメッセージも破棄される.
- 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];NotificationFunction (1)
アプリケーション (4)
電子メール (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 Cloudアカウント,あるいは他のリモートの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を使うと現行のセッションでAPIFunction,FormFunction,あるいはその他の関数がWolfram Cloudで実行された際に,アップデートが受信できる:
CreateChannel["api"];
listener = ChannelListen["api"]Dynamic[listener["Dataset"]]単純な操作を行って結果をメタデータと一緒にリスナに送信するWebページを配備する:
CloudDeploy[FormPage[{"x" -> "Integer"}, With[{user = $WolframID}, Module[{result = #x + 1}, ChannelSend[user <> ":" <> "api", <|"input" -> #x, "result" -> result, "from" -> $RequesterAddress|>];result]&]]]
DeleteChannel["api"];ソーシャルメディア (1)
HTTPリクエストのコンテンツをチャネルに転送するAPIFunctionを作る:
channel = CreateChannel["TwitterMathematicaMentions"];
api = CloudDeploy[APIFunction[
{"from" -> "String", "text" -> "String"},
ChannelSend["TwitterMathematicaMentions", <|##|>]&
], Permissions -> "Public"]Twitter上の「Mathematica」という単語への言及を追跡して,これをHTTPを介してAPIFunctionに送信するIFTTTアプレットを作る:
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の出力は,メッセージウィンドウに表示される:
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 Language. 2016. "ChannelListen." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2020. https://reference.wolfram.com/language/ref/ChannelListen.html.
APA
Wolfram Language. (2016). ChannelListen. Wolfram Language & System Documentation Center. Retrieved from 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: 15-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: 15-August-2026]}