While I confirm that using the Manifest you provided the example works, using the latest version with your patch I have the same error:
using Pkg
cd(@__DIR__)
Pkg.activate(".")
Pkg.add(["Interact","Mux","Plots"])
Pkg.add(url="https://github.com/mkitti/WebIO.jl.git#mkitti-fix-mux-integration")
using Interact, Plots, Mux
mp = @manipulate throttle=.05 for λ=0:.1:5, μ=0:.1:5
xs = range(0.0, 1.0, length = 100)
Plots.plot(xs, x -> λ*x^2 + μ)
end
ui = dom"div"(mp)
WebIO.webio_serve(page("/", req -> ui), 8003)
Status:
(testWebIO) pkg> status
Status `~/CloudFiles/beta-lorraine-sync/Documents/JuliaApressBook/2024Update/bookSrc/julia_source_code/ch13/testWebIO/Project.toml`
[c601a237] Interact v0.10.5
[a975b10e] Mux v1.0.2
[91a5bcdd] Plots v1.40.5
[0f1e0344] WebIO v0.8.21 `https://github.com/mkitti/WebIO.jl.git#mkitti-fix-mux-integration#master`
Error:
```text
[ Info: Listening on: 0.0.0.0:8003, thread id: 1
(testWebIO) pkg> add Error handling websocket connection:
TaskFailedException
Stacktrace:
[1] wait(t::Task)
@ Base ./task.jl:370
[2] create_socket(req::Dict{Any, Any})
@ WebIO ~/.julia/packages/WebIO/8Xm9p/src/providers/mux.jl:47
[3] #5
@ ~/.julia/packages/Mux/u4vsZ/src/Mux.jl:17 [inlined]
[4] (::Mux.var"#1#2"{Mux.var"#5#6"{Mux.var"#29#30"{Vector{SubString{String}}}, typeof(WebIO.create_socket)}, Mux.var"#1#2"{typeof(Mux.wclose), Mux.var"#1#2"{Mux.var"#19#20"{Mux.var"#23#24"{Symbol, Int64}}, Mux.var"#21#22"{String}}}})(x::Dict{Any, Any})
@ Mux ~/.julia/packages/Mux/u4vsZ/src/Mux.jl:10
[5] splitquery(app::Mux.var"#1#2"{Mux.var"#5#6"{Mux.var"#29#30"{Vector{SubString{String}}}, typeof(WebIO.create_socket)}, Mux.var"#1#2"{typeof(Mux.wclose), Mux.var"#1#2"{Mux.var"#19#20"{Mux.var"#23#24"{Symbol, Int64}}, Mux.var"#21#22"{String}}}}, req::Dict{Any, Any})
@ Mux ~/.julia/packages/Mux/u4vsZ/src/basics.jl:31
[6] #1
@ ~/.julia/packages/Mux/u4vsZ/src/Mux.jl:10 [inlined]
[7] wcatch(app::Mux.var"#1#2"{typeof(Mux.splitquery), Mux.var"#1#2"{Mux.var"#5#6"{Mux.var"#29#30"{Vector{SubString{String}}}, typeof(WebIO.create_socket)}, Mux.var"#1#2"{typeof(Mux.wclose), Mux.var"#1#2"{Mux.var"#19#20"{Mux.var"#23#24"{Symbol, Int64}}, Mux.var"#21#22"{String}}}}}, req::Dict{Any, Any})
@ Mux ~/.julia/packages/Mux/u4vsZ/src/websockets_integration.jl:11
[8] #1
@ ~/.julia/packages/Mux/u4vsZ/src/Mux.jl:10 [inlined]
[9] todict
@ ~/.julia/packages/Mux/u4vsZ/src/basics.jl:25 [inlined]
[10] #3 (repeats 2 times)
@ ~/.julia/packages/Mux/u4vsZ/src/Mux.jl:14 [inlined]
[11] (::Mux.var"#1#2"{Mux.var"#3#4"{Mux.var"#3#4"{typeof(Mux.todict), typeof(Mux.wcatch)}, typeof(Mux.splitquery)}, Mux.var"#1#2"{Mux.var"#5#6"{Mux.var"#29#30"{Vector{SubString{String}}}, typeof(WebIO.create_socket)}, Mux.var"#1#2"{typeof(Mux.wclose), Mux.var"#1#2"{Mux.var"#19#20"{Mux.var"#23#24"{Symbol, Int64}}, Mux.var"#21#22"{String}}}}})(x::HTTP.WebSockets.WebSocket)
@ Mux ~/.julia/packages/Mux/u4vsZ/src/Mux.jl:10
[12] (::Mux.var"#9#10"{Mux.App})(sock::HTTP.WebSockets.WebSocket)
@ Mux ~/.julia/packages/Mux/u4vsZ/src/server.jl:48
[13] upgrade(f::Mux.var"#9#10"{Mux.App}, http::HTTP.Streams.Stream{HTTP.Messages.Request, HTTP.Connections.Connection{Sockets.TCPSocket}}; suppress_close_error::Bool, maxframesize::Int64, maxfragmentation::Int64, nagle::Bool, quickack::Bool, kw::@Kwargs{})
@ HTTP.WebSockets ~/.julia/packages/HTTP/sJD5V/src/WebSockets.jl:456
[14] upgrade
@ ~/.julia/packages/HTTP/sJD5V/src/WebSockets.jl:425 [inlined]
[15] (::Mux.var"#14#15"{Mux.App, Mux.App})(http::HTTP.Streams.Stream{HTTP.Messages.Request, HTTP.Connections.Connection{Sockets.TCPSocket}})
@ Mux ~/.julia/packages/Mux/u4vsZ/src/server.jl:81
[16] #invokelatest#2
@ ./essentials.jl:1043 [inlined]
[17] invokelatest
@ ./essentials.jl:1040 [inlined]
[18] handle_connection(f::Function, c::HTTP.Connections.Connection{Sockets.TCPSocket}, listener::HTTP.Servers.Listener{Nothing, Sockets.TCPServer}, readtimeout::Int64, access_log::Nothing)
@ HTTP.Servers ~/.julia/packages/HTTP/sJD5V/src/Servers.jl:469
[19] (::HTTP.Servers.var"#16#17"{Mux.var"#14#15"{Mux.App, Mux.App}, HTTP.Servers.Listener{Nothing, Sockets.TCPServer}, Set{HTTP.Connections.Connection}, Int64, Nothing, ReentrantLock, Base.Semaphore, HTTP.Connections.Connection{Sockets.TCPSocket}})()
@ HTTP.Servers ~/.julia/packages/HTTP/sJD5V/src/Servers.jl:401
nested task error: MethodError: no method matching isopen(::HTTP.WebSockets.WebSocket)
The function `isopen` exists, but no method is defined for this combination of argument types.
Closest candidates are:
isopen(::WebIO.WebSockConnection)
@ WebIO ~/.julia/packages/WebIO/8Xm9p/src/providers/mux.jl:54
isopen(::SimpleBufferStream.BufferStream)
@ SimpleBufferStream ~/.julia/packages/SimpleBufferStream/N1BA4/src/BufferStream.jl:30
isopen(::FileWatching.FDWatcher)
@ FileWatching ~/lib/julia-1.11.0-rc2/share/julia/stdlib/v1.11/FileWatching/src/FileWatching.jl:393
...
Stacktrace:
[1] (::WebIO.var"#98#99"{WebIO.WebSockConnection, HTTP.WebSockets.WebSocket})()
@ WebIO ~/.julia/packages/WebIO/8Xm9p/src/providers/mux.jl:40
</details>