taoensso / sente

Realtime web comms library for Clojure/Script
https://www.taoensso.com/sente
Eclipse Public License 1.0
1.73k stars 193 forks source link

Client-id is nil in version 1.17.0 #427

Closed fsrc closed 1 year ago

fsrc commented 1 year ago

I have the following minimal project that starts a server on port 3000. When I request it in Google Chrome like so http://localhost:3000/chsk?client-id=234234 I get the following result +[[:chsk/handshake [:taoensso.sente/nil-uid nil]]].

I had the same problem running DavidVujic/sente-with-reagent-and-re-frame referenced in the README.md file.

deps.edn

{:paths ["src"]
 :deps {org.clojure/clojure {:mvn/version "1.11.1"}
        com.taoensso/sente  {:mvn/version "1.17.0"}
        ring/ring           {:mvn/version "1.9.6"}
        ring/ring-defaults  {:mvn/version "0.3.4"}
        ring-cors/ring-cors {:mvn/version "0.1.13"}
        http-kit/http-kit   {:mvn/version "2.5.3"}
        compojure/compojure {:mvn/version "1.7.0"}}

 :aliases
 {:dev {:extra-deps {nrepl/nrepl {:mvn/version "1.1.0-alpha1"}
                     cider/cider-nrepl {:mvn/version "0.29.0"}
                     cider/piggieback {:mvn/version "0.5.3"}}
        :extra-paths ["dev"]
        :main-opts ["-m" "nrepl.cmdline"
                    "--middleware" "[cider.nrepl/cider-middleware]"
                    "--interactive"]}}}

core.clj

(ns frente.server.core
  (:require [taoensso.sente :as sente]
            [taoensso.sente.server-adapters.http-kit :refer (get-sch-adapter)]
            [compojure.core :as comp 
                            :refer [defroutes 
                                     GET 
                                     POST]]
            [compojure.route :refer [not-found]]
            [ring.middleware.defaults :refer [wrap-defaults site-defaults]]
            [ring.middleware.cors :refer [wrap-cors]]
            [org.httpkit.server :as http-kit]))

(def sente-server (sente/make-channel-socket-server! 
                   (get-sch-adapter) 
                   {:packer :edn 
                    :csrf-token-fn nil}))

(def ajax-get-or-ws-handshake-fn 
  (-> sente-server :ajax-get-or-ws-handshake-fn))

(def ajax-post-fn 
  (-> sente-server :ajax-post-fn))

(def http-port 3000)
(defonce stop-server (atom nil))

;; HTTP routes
(defroutes routes
  (GET "/" [] "Frasse, world!")
  (GET "/chsk" req (ajax-get-or-ws-handshake-fn req))
  (POST "/chsk" req (ajax-post-fn req))
  (not-found "Not found"))

;; Middleware and routes combined into handler
(def handler
  (-> routes
      (wrap-defaults site-defaults)
      (wrap-cors :access-control-allow-origin #{"*"}
                 :access-control-allow-methods #{"GET"
                                                 "POST"}))) 

;; Stop HTTP server
(defn stop! []
  (when @stop-server
    (@stop-server :timeout 1000)
    (reset! stop-server nil)
    (println "Server stopped.")))

;; Start HTTP server
(defn start! []
  (stop!)
  (reset! stop-server
          (http-kit/run-server handler
                               {:port http-port}))

  (println (str "Server started on port " http-port)))

(comment
  (start!))
ptaoussanis commented 1 year ago

@fsrc Hi Frederik, Sente uses two different identification concepts:

  1. Client-ids (cids) that refer to specific connections (browser tabs, devices, etc.).
  2. User-ids (uids) that refer to a logical user with >= 0 associated client-ids.

I get the following result +[[:chsk/handshake [:taoensso.sente/nil-uid nil]]]

This message indicates that the user-id ([2]) is nil, which is normal and expected if no user-id has been manually assigned. The message doesn't indicate anything about the absence of a client-id ([1]).

The reference example project shows how the user-id can be assigned and used.

Hope that helps! Cheers :-)

ptaoussanis commented 1 year ago

I should add - Sente v1.18 is scheduled for release around end of April, and I'm hoping to include some improved documentation - including a new Wiki which will include a discussion of the above identifiers.

fsrc commented 1 year ago

Ok, I see. Thanks for the fast reply!