haskell - 如何使用 Haskell 在同一端口上运行 Websockets 服务器和普通 HTTP Web 服务器?

标签 haskell websocket socket.io

我一直在使用 Network.WebSockets 对 websocket 服务器进行编程.

您可以使用 runServer 启动 Websockets 服务器,如下所示:

app :: Request -> WebSockets Hybi00 ()
app _ = app1
main :: IO ()
main = runServer "0.0.0.0" 8000 app

但我真的希望 Websockets 服务器能够与普通的 Snap Web 服务器一起在端口 80 上运行。

Node.js 能够通过 Socket.io 执行此操作(请参阅左侧示例中的 http://socket.io/#how-to-use)。

这是一个实现类似功能的 Ruby 库:https://github.com/simulacre/sinatra-websocket

在 Haskell 中如何做到这一点?

最佳答案

websockets-snap包有一个功能:

runWebSocketsSnap::协议(protocol) p => (请求 -> WebSockets p ()) -> Snap ()

这应该让您可以从应用程序中的几乎任何位置使用 websocket。这是一个简单的例子:

main = quickHttpServe $ route [ ("hello", writeText "hello world")
                              , ("websocket", runWebSocketsSnap ...)
                              ]

关于haskell - 如何使用 Haskell 在同一端口上运行 Websockets 服务器和普通 HTTP Web 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12753249/

相关文章:

haskell - getAllFiles(但不是符号链接(symbolic link))

node.js - Socket.io 具有多个命名空间?

java - Tomcat websocket 回显应用程序

Node.js Socket.io HTTPS - 传输轮询

list - Haskell: `reverse` 或 right `cons` ,效率更高

Haskell if then else 为 "two statements"

haskell - Haskell 中的 "Strategy Pattern"

node.js - engine.io 是否支持安全的 WebSockets wss?

javascript - 显示已交付和蓝色勾号,如 whats app

node.js - 抛出新的类型错误 ('OAuth2Strategy requires a clientID option' ); }