orthecreedence / cl-async

Asynchronous IO library for Common Lisp.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

can I accepted client socket in another event loop?

ljj038 opened this issue · comments

(syntax:use-syntax :interpol)

(defun master-worker-server ()
  (let ((server (as:tcp-server "127.0.0.1"
                               8000
                               (lambda (client-socket data)
                                 (as:write-socket-data client-socket
                                                       #?"HTTP/1.1 200 OK\r\nContent-Type: text/html;charset=utf-8\r\n\r\n<h1>works!</h1>\r\n"
                                                       :write-cb (lambda (client-socket)
                                                                   (as:close-socket client-socket))))
                               :connect-cb (lambda (socket)
                                             (format t "connetion established~%")))))
    (as:signal-handler as:+sigint+
                       (lambda (sig)
                         (declare (ignorable sig))
                         (as:exit-event-loop)))
    server))

Can I prepare several event loop to listen and accept client socket, like nginx do.

I dont know how to replace the default read-cb and connect-cb.

I think if we can do this, maybe the server's performance will be much better than only one event loop