Skip to content

Instantly share code, notes, and snippets.

@orthecreedence
Last active August 29, 2015 14:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save orthecreedence/b8a1796aed8023fe8a57 to your computer and use it in GitHub Desktop.
Save orthecreedence/b8a1796aed8023fe8a57 to your computer and use it in GitHub Desktop.
(ql:quickload '(:cl-async :cl-interpol :babel))
(defpackage :cl-async-bench
(:use :cl))
(in-package :cl-async-bench)
(cl-interpol:enable-interpol-syntax)
(defparameter
*http-response*
(babel:string-to-octets
#?"HTTP/1.1 200 OK\r\nServer: cl-async-test (0.0.1)\r\nContent-Length: 30\r\n\r\nthis is a test body response.\n"
:encoding :utf-8))
(defparameter
*http-split*
(vector (subseq *http-response* 0 80)
(subseq *http-response* 80)))
(defun start-server (&key (port 8008) split-writes)
(let* ((server (as:tcp-server
nil
port
(lambda (sock data)
(declare (ignore data))
(unless (as:socket-closed-p sock)
(cond (split-writes
(as:write-socket-data sock (aref *http-split* 0))
(as:write-socket-data sock (aref *http-split* 1)))
(t
(as:write-socket-data sock *http-response*)))))
(lambda (ev)
(unless (and (typep ev 'as:tcp-info)
(not (typep ev 'as:tcp-error)))
(format t "(ev) ~a~%" ev))))))
(format t "Listening on ~a~%" port)
(as:signal-handler 2
(lambda (sig)
(declare (ignore sig))
(as:close-tcp-server server)
(as:clear-signal-handlers)))))
(defun start ()
(as:with-event-loop ()
(start-server :port 8008 :split-writes t)))
(start)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment