-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathactors_api_guide_6.html
78 lines (78 loc) · 5.13 KB
/
actors_api_guide_6.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="HTML Tidy for Mac OS X (vers 25 March 2009), see www.w3.org" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Scala 2.8 アクター API -- リモートアクター</title>
<link rel="stylesheet" type="text/css" href="guide.css" />
</head>
<body dir="ltr">
<table width="100%" cellpadding="0" cellspacing="2">
<tr>
<td bgcolor="#99CCFF"><a href="actors_api_guide_7.html"><img border="0" alt="目次" src="next.png" /></a></td>
<td bgcolor="#99CCFF"><a href="actors_api_guide_0.html"><img border="0" alt="トップ" src="up.png" /></a></td>
<td bgcolor="#99CCFF"><a href="actors_api_guide_5.html"><img border="0" alt="スケジューラ" src="previous.png" /></a></td>
<td align="center" bgcolor="#99CCFF" width="100%"><b>リモートアクター</b></td>
<td bgcolor="#99CCFF" align="center" class="tocref"><a href=
"actors_api_guide_7.html">目次</a></td>
</tr>
</table>
<h1>リモートアクター</h1>
<p>この節ではリモートアクター API の説明をする。主なインターフェイスは、<code>scala.actors.remote</code> パッケージの <a href="http://www.scala-lang.org/api/current/scala/actors/remote/RemoteActor$.html"><tt>RemoteActor</tt></a> オブジェクトだ。このオブジェクトはリモートアクターのインスタンスを作成し接続するためのメソッドを提供する。今後のコード例では、<code>RemoteActor</code> の全てのメンバーがインポート済みであることを前提とする。以下に用いられているインポートを示す:</p>
<div class="quote">
<pre>
import scala.actors._
import scala.actors.Actor._
import scala.actors.remote._
import scala.actors.remote.RemoteActor._
</pre></div>
<h2><a name="id1" id="id1">リモートアクターの起動</a></h2>
<p>リモートアクターはシンボル (<a href="http://www.scala-lang.org/api/current/scala/Symbol.html"><tt>Symbol</tt></a>) によって一意的に識別される。このシンボルはリモートアクターが実行されている JVM のインスタンス独自のものだ。<code>'myActor</code> という名前で識別されるリモートアクターの作成を以下に示す。</p>
<div class="quote">
<pre>
class MyActor extends Actor {
def act() {
alive(9000)
register('myActor, self)
// ...
}
}
</pre></div>
<p>アクターの名前を登録できるのは、(存命中の)一人のアクターまでであることに注意してほしい。例えば、アクター <i>A</i> を <code>'myActor</code> として登録した後で、別のアクター <i>B</i> も <code>'myActor</code> 登録しようとすると、まず <i>A</i> が終了するまで待たなくてはいけない。この規制は全ポートに渡り、<i>B</i> を <i>A</i> と別のポートで登録するだけでは不十分だ。</p>
<h2><a name="id2" id="id2">リモートアクターへの接続</a></h2>
<p>リモートアクターへの接続も簡単だ。マシーン <code>myMachine</code> のポート <code>8000</code> で <code>'anActor</code> という名前で実行中のリモートアクターへのリモート参照を取得するには、以下のように <code>select</code> を用いる:</p>
<div class="quote">
<pre>
val myRemoteActor = select(Node("myMachine", 8000), 'anActor)
</pre></div>
<p><code>select</code> が返すアクターは <code>AbstractActor</code> 型であり、基本的には普通のアクターを同じインターフェイスを持つため、通常のメッセージ通信演算をサポートする:</p>
<div class="quote">
<pre>
myRemoteActor ! "おはよう!"
receive {
case response => println("応答: " + response)
}
myRemoteActor !? "人生の意味は何?" match {
case 42 => println("成功")
case oops => println("失敗: " + oops)
}
val future = myRemoteActor !! "円周率の最後の桁の数は何?"
</pre></div>
<p>ここで注意してほしいのは、<code>select</code> は遅延評価されるためネットワーク接続を始動しないということだ。これは <code>select</code> が、(例えば、<code>!</code> の呼び出しなど)必要に応じてネットワーク接続を始動できる状態の新しい <code>AbstractActor</code> のインスタンスを作成するからだ。</p>
<hr />
<address>2010年11月30日</address>
<br />
<table width="100%" cellpadding="0" cellspacing="2">
<tr>
<td bgcolor="#99CCFF"><a href="actors_api_guide_7.html"><img border="0" alt="目次" src="next.png" /></a></td>
<td bgcolor="#99CCFF"><a href="actors_api_guide_0.html"><img border="0" alt="トップ" src="up.png" /></a></td>
<td bgcolor="#99CCFF"><a href="actors_api_guide_5.html"><img border="0" alt="スケジューラ" src="previous.png" /></a></td>
<td align="center" bgcolor="#99CCFF" width="100%"><b>リモートアクター</b></td>
<td bgcolor="#99CCFF" align="center" class="tocref"><a href=
"actors_api_guide_7.html">目次</a></td>
</tr>
</table>
</body>
</html>