[Distributed Places] a few of Eli's documentation suggestions

This commit is contained in:
Kevin Tew 2012-05-20 22:43:05 -06:00
parent 562fa3c6b9
commit 83c26eef4b
2 changed files with 32 additions and 11 deletions

View File

@ -109,6 +109,8 @@
;re-provides ;re-provides
quote-module-path quote-module-path
place-channel-get
place-channel-put
;named-place-typed-channel ;named-place-typed-channel
named-place-typed-channel% named-place-typed-channel%
@ -117,8 +119,6 @@
;contracts ;contracts
*channel? *channel?
port-no? port-no?
place-channel-get
place-channel-put
) )
(define-runtime-path distributed-launch-path "distributed/launch.rkt") (define-runtime-path distributed-launch-path "distributed/launch.rkt")

View File

@ -6,6 +6,7 @@
racket/place/distributed racket/place/distributed
racket/sandbox racket/sandbox
racket/class racket/class
(except-in "mz.rkt" log-message)
(for-label (except-in racket/base log-message) (for-label (except-in racket/base log-message)
racket/place/define-remote-server racket/place/define-remote-server
racket/place/distributed racket/place/distributed
@ -23,6 +24,7 @@
@title[#:tag "distributed-places"]{Distributed Places} @title[#:tag "distributed-places"]{Distributed Places}
@guidealso["distributed-places"]
@defmodule[racket/place/distributed] @defmodule[racket/place/distributed]
@ -44,17 +46,22 @@ The distributed places implementation relies on two assumptions:
@item{The user's @filepath{.ssh/config} and @item{The user's @filepath{.ssh/config} and
@filepath{.ssh/authorized_keys} files are configured correctly to @filepath{.ssh/authorized_keys} files are configured correctly to
allow passwordless connection to remote hosts via public key authentication.} allow passwordless connection to remote hosts via public key authentication.}
@item{The same user account is used across all nodes in the @item{Distributed places does not support the specification of ssh usernames.
distributed network.} If a non-default ssh username is required the @filepath{.ssh/config} file
@item{All machines run the same version of Racket.} should be used to specifiy the username.}
@item{All machines run the same version of Racket. Futures versions of distributed
places may use the zo binary data format for serialization.}
] ]
The following example illustrates a configuration and use of The following example illustrates a configuration and use of
distributed places that starts a new node on the current machine and distributed places that starts a new node on the current machine and
passes it a @racket["Hello World"] string: passes it a @racket["Hello World"] string:
@racketmod[
racket/base @(begin
#reader scribble/comment-reader
[examples
(module hello-world-example racket/base
(require racket/place/distributed (require racket/place/distributed
racket/place) racket/place)
@ -63,17 +70,30 @@ passes it a @racket["Hello World"] string:
(define (hello-world) (define (hello-world)
(place ch (place ch
(printf "hello-world received: ~a\n" (place-channel-get ch)) (printf "hello-world received: ~a\n" (place-channel-get ch))
(define HW "Hello World") (place-channel-put ch "Hello World\n")
(place-channel-put ch (format "~a\n" HW)) (printf "hello-world sent: Hello World\n" )))
(printf "hello-world sent: ~a\n" HW)))
(module+ main (module+ main
;; 1) spawns a node running at "localhost" and listenting on port
;; 6344 for incomming connections.
;; 2) connects to the node running at localhost:6344 and creates a
;; place on that node by calling the hello-world procedure from
;; the current module.
;; 3) returns a remote-node% instance (node) and a
;; remote-connection% instance (pl) for communicating with the
;; new node and place
(define-values (node pl) (define-values (node pl)
(spawn-node-supervise-place-thunk-at "localhost" (spawn-node-supervise-place-thunk-at "localhost"
#:listen-port 6344 #:listen-port 6344
(quote-module-path "..") (quote-module-path "..")
'hello-world)) 'hello-world))
;; starts a message router which adds three event-container<%>s to
;; its list of events to handle: the node and two after-seconds
;; event containers . Two seconds after the launch of the message-router, a
;; message will be sent to the pl place. After six seconds, the
;; program and all spawned nodes and places will terminate.
(message-router (message-router
node node
(after-seconds 2 (after-seconds 2
@ -81,8 +101,9 @@ passes it a @racket["Hello World"] string:
(printf "message-router received: ~a\n" (*channel-get pl))) (printf "message-router received: ~a\n" (*channel-get pl)))
(after-seconds 6 (after-seconds 6
(exit 0)))) (exit 0)))))
] ]
)
@defproc[(message-router [ec (is-a?/c event-container<%>)] ...+) void?]{ @defproc[(message-router [ec (is-a?/c event-container<%>)] ...+) void?]{
Waits in an endless loop for one of many events to become ready. The Waits in an endless loop for one of many events to become ready. The