gpt4 book ai didi

haskell - Yesod、WebSockets 和持久性

转载 作者:行者123 更新时间:2023-12-02 10:56:55 24 4
gpt4 key购买 nike

我正在尝试在 Haskell 中实现一个回合制游戏的服务器。我的选择是使用 Yesod 进行管理和元信息(例如,用户参与哪些游戏等)。

我想使用网络套接字来保持游戏内数据开销较小。

查看 ws-chat 示例,我不确定如何访问 Handler Monad 及其持久性。

如果有一些用于连接的簿记代码包裹在“普通”处理程序中,该处理程序本身会更新数据库并通知相关用户,那将是完美的。

最佳答案

我认为它应该是这样的。

{-# LANGUAGE QuasiQuotes, TypeFamilies, GeneralizedNewtypeDeriving, TemplateHaskell, OverloadedStrings, GADTs, FlexibleContexts #-}
module Main where
import Control.Monad.IO.Class (liftIO)
import Data.String (fromString)
import Database.Persist
import Database.Persist.TH
import Database.Persist.Sqlite
import Network.Wai.Application.Static (staticApp, defaultWebAppSettings, defaultFileServerSettings)
import Network.Wai.Handler.Warp (runSettings, defaultSettings, settingsIntercept, settingsPort)
import Network.Wai.Handler.WebSockets (intercept)
import qualified Network.WebSockets as WS

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistUpperCase|
Person
name String
age Int
deriving Show
|]

ws :: WS.Request -> WS.WebSockets WS.Hybi10 ()
ws r = do
WS.acceptRequest r
liftIO $ runSqlite ":memory:" $ do
runMigration migrateAll
michaelId <- insert $ Person "Michael" 26
michael <- get michaelId
liftIO $ print michael

main :: IO ()
main = runSettings defaultSettings
{ settingsPort = 9160
, settingsIntercept = intercept $ ws
} $ staticApp (defaultFileServerSettings $ fromString ".")

关于haskell - Yesod、WebSockets 和持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15031607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com