ZeroMQ 的通用 lisp 绑定
common lisp bindings for ZeroMQ
我是 Lisp 的新手,正在努力学习。特别是,我正在尝试使用 ZeroMQ 库来制作分布式系统。
这是我的探索代码
;;hwserver.lisp
(defun main()
;; prepare contexts
(zmq:with-context (context)
(zmq:with-socket (socket context zmq:rep)
(zmq:bind socket "tcp://*5555")
(loop
(let ((request (make-instance 'zmq:msg)))
;; wait for next request from client
(zmq:recv socket request)
(print "received request: [~A]~%"
(zmq:msg-data-as-string request))
;;do some work
(sleep 1)
;;send reply back to client
(let ((reply (make-instance 'zmq:msg :data "Hello World")))
(zmq:send socket reply))))))
(sb-ext:exit))
在REPL中,我运行下面的命令
(ql:quickload "zeromq")
(load "hwserver.lisp")
然后我收到以下警告。
;
; caught WARNING:
; undefined variable: ZEROMQ:REP
;
; compilation unit finished
; Undefined variable:
; ZEROMQ:REP
; caught 1 WARNING condition
尽管 zmq:rep 是从 zeromq package 导出的。
并且如果我忽略警告尝试 运行 (main)
,我会得到 以下错误
The variable ZEROMQ:REP is unbound.
[Condition of type UNBOUND-VARIABLE]
Restarts:
0: [RETRY] Retry SLIME REPL evaluation request.
1: [*ABORT] Return to SLIME's top level.
2: [ABORT] abort thread (#<THREAD "repl-thread" RUNNING {10039B0003}>)
Backtrace:
;; backtrace omitted for being uninteresting here
我做错了什么?
这一行
(zmq:with-socket (socket context zmq:rep)
造成这个错误
The variable ZEROMQ:REP is unbound.
意思是:它是一个变量,它没有值。符号导出与否无关紧要
在我看来,代码需要关键字符号 :rep
作为套接字类型描述符,而不是您的 zmq:rep
.
另一种错误宏未检查其预期类型的情况。
我是 Lisp 的新手,正在努力学习。特别是,我正在尝试使用 ZeroMQ 库来制作分布式系统。 这是我的探索代码
;;hwserver.lisp
(defun main()
;; prepare contexts
(zmq:with-context (context)
(zmq:with-socket (socket context zmq:rep)
(zmq:bind socket "tcp://*5555")
(loop
(let ((request (make-instance 'zmq:msg)))
;; wait for next request from client
(zmq:recv socket request)
(print "received request: [~A]~%"
(zmq:msg-data-as-string request))
;;do some work
(sleep 1)
;;send reply back to client
(let ((reply (make-instance 'zmq:msg :data "Hello World")))
(zmq:send socket reply))))))
(sb-ext:exit))
在REPL中,我运行下面的命令
(ql:quickload "zeromq")
(load "hwserver.lisp")
然后我收到以下警告。
;
; caught WARNING:
; undefined variable: ZEROMQ:REP
;
; compilation unit finished
; Undefined variable:
; ZEROMQ:REP
; caught 1 WARNING condition
尽管 zmq:rep 是从 zeromq package 导出的。
并且如果我忽略警告尝试 运行 (main)
,我会得到 以下错误
The variable ZEROMQ:REP is unbound.
[Condition of type UNBOUND-VARIABLE]
Restarts:
0: [RETRY] Retry SLIME REPL evaluation request.
1: [*ABORT] Return to SLIME's top level.
2: [ABORT] abort thread (#<THREAD "repl-thread" RUNNING {10039B0003}>)
Backtrace:
;; backtrace omitted for being uninteresting here
我做错了什么?
这一行
(zmq:with-socket (socket context zmq:rep)
造成这个错误
The variable ZEROMQ:REP is unbound.
意思是:它是一个变量,它没有值。符号导出与否无关紧要
在我看来,代码需要关键字符号 :rep
作为套接字类型描述符,而不是您的 zmq:rep
.
另一种错误宏未检查其预期类型的情况。