1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
;;;; rpc-demo.scm
;;;; Simple database server / client
(require-extension (srfi 18) extras tcp rpc sqlite3)
;;; Common things
(define operation (string->symbol (car (command-line-arguments))))
(define param (cadr (command-line-arguments)))
(print "Operation: " operation ", param: " param)
(define rpc:listener
(if (eq? operation 'server)
(tcp-listen (rpc:default-server-port))
|
>
>
>
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
;;;; rpc-demo.scm
;;;; Simple database server / client
;;; start server thusly: ./rpctest server test.db
;;; you will need to init test.db:
;;; sqlite3 test.db "CREATE TABLE foo (id INTEGER PRIMARY KEY, var TEXT, val TEXT);"
(require-extension (srfi 18) extras tcp rpc sqlite3)
;;; Common things
(define total-queries 0)
(define start-time (current-seconds))
(define operation (string->symbol (car (command-line-arguments))))
(define param (cadr (command-line-arguments)))
(print "Operation: " operation ", param: " param)
(define rpc:listener
(if (eq? operation 'server)
(tcp-listen (rpc:default-server-port))
|
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
(rpc:default-server-port port))
#f)
(let ((db (open-database param)))
(set-finalizer! db finalize!)
(rpc:publish-procedure!
'query
(lambda (sql callback)
(print "Executing query '" sql "' ...")
(for-each-row
callback
db sql))))
(thread-join! rpc:server))
;;; Client side
(define (callback1 . columns)
(let loop ((c columns) (i 0))
(unless (null? c)
|
>
|
>
>
|
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
(rpc:default-server-port port))
#f)
(let ((db (open-database param)))
(set-finalizer! db finalize!)
(rpc:publish-procedure!
'query
(lambda (sql callback)
(set! total-queries (+ total-queries 1))
(print "Executing query '" sql "' ...")
(for-each-row
callback
db sql)
(print "Query rate: " (/ total-queries (/ (- (current-seconds) start-time) 60)) " per minute")
)))
(thread-join! rpc:server))
;;; Client side
(define (callback1 . columns)
(let loop ((c columns) (i 0))
(unless (null? c)
|