ryoakg
1/27/2017 - 3:19 PM

httpkit-ws-echo-server.clj

(set-env! :dependencies '[[http-kit "2.2.0"]])

(require '[org.httpkit.server :as ws]
         '[clojure.pprint :refer [pprint]])

(defn echo-back-handler [ring-request]
  (ws/with-channel ring-request channel
    ;; on-open
    (if (ws/websocket? channel)
      (let [msg "connected a client with WebSocket"]
        (println msg)
        (ws/send! channel msg))
      (println "connected a client with HTTP"))

    (ws/on-close channel
                 (fn [status]
                   (println "channel closed: " (name status))))

    (ws/on-receive channel
                   (fn [data]
                     (println "received: " data)
                     (ws/send! channel data)))))

(def stop-server
  (ws/run-server echo-back-handler
                 {:port 8080}))

;;; test
;;;   npm install -g wscat
;;;   wscat -c ws://localhost:8080

(stop-server)