I'm running a shiny app on a shiny server deployed as a Docker container. Nothing too eventful except that I recently added a session$sendCustomMessage
call and now my server is segfaulting. Okay. Stack trace ends with the server trying to send a websocket message to the client, which makes sense given that I asked it to do so. I figure there is some bug in the bowels of httpuv
and I was hoping that if I tell shiny not to use websockets maybe it would fall back on another method of communicating with the client and I could get on with my lifeā¦ but no.
Here's the crash:
*** caught segfault ***
address 0x8, cause 'memory not mapped'
Traceback:
1: sendWSMessage(self$handle, FALSE, as.character(message))
2: private$websocket$send(json)
3: private$write(toJSON(msg))
4: private$sendMessage(custom = data)
So what I did at this point was to add disable_protocols websocket
to my shiny-server.conf
. I can confirm that a. I am running my app under shiny server and b. the server is reading my configuration, because this is what I see in the app's HTML source:
<script>preShinyInit({reconnect:true,disableProtocols:["websocket"]});</script>
And also, I did control-option-shift-A and websocket is indeed disabled in the protocol list.
However, with all that in place, when I do the thing that makes R crash in my app, it still crashes in exactly the same way. What am I missing here? Why is shiny server calling sendWSMessage
even though the client clearly thinks that websockets are 100% off the table? And, more importantly, how can I make it stop?
(I am willing to accept increased latency in the custom messages getting from the server to the client in exchange for the server not crashing, but I would prefer not having to dive into the bowels of httpuv
and figure out why it's crashing. On a bit of a timetable here.)
Thoughts?