Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 通过网络对事件进行排序(基于网络回合的游戏)_Multithreading_Sockets_Networking_Haskell_Semaphore - Fatal编程技术网

Multithreading 通过网络对事件进行排序(基于网络回合的游戏)

Multithreading 通过网络对事件进行排序(基于网络回合的游戏),multithreading,sockets,networking,haskell,semaphore,Multithreading,Sockets,Networking,Haskell,Semaphore,我对haskell networking(以及一般的点对点通信)相当陌生,希望能开发一款玩家对玩家的网络绞刑游戏,类似于流行的“与朋友绞刑”。在完成了一些教程(包括haskell.org的“实现聊天服务器”)之后,我成功地创建了一个服务器,并将套接字连接到套接字,将消息返回到第四个 我还有一个hangman客户端,当给定一个预定的输入时,它会按预期播放 但是,我遇到了在连接的客户端之间排序事件的问题。由于对套接字通道的读取和写入发生在不同的线程上(由于readChan和writeChan的阻塞性

我对haskell networking(以及一般的点对点通信)相当陌生,希望能开发一款玩家对玩家的网络绞刑游戏,类似于流行的“与朋友绞刑”。在完成了一些教程(包括haskell.org的“实现聊天服务器”)之后,我成功地创建了一个服务器,并将套接字连接到套接字,将消息返回到第四个

我还有一个hangman客户端,当给定一个预定的输入时,它会按预期播放

但是,我遇到了在连接的客户端之间排序事件的问题。由于对套接字通道的读取和写入发生在不同的线程上(由于readChan和writeChan的阻塞性质),因此我不确定如何在远程终端之间对操作进行排序。我知道我想要什么,只是不知道如何到达那里:

  • 第二个用户连接后,调用“发送”功能,提示他们输入第一个播放器的单词
  • 玩家1通过“recieve”功能接收这个单词,如果它不是命令关键字(Join、quit、Output),则使用提供的单词运行hangman游戏。同时,玩家2的屏幕阻塞,等待玩家1完成
  • 球员1结束。记录他的结果,然后为他调用“发送”功能,提示他输入玩游戏的信息
  • 重复2-3,直到有玩家退出
  • 我已经用了两种方法来解决这个问题。我比较成功的方法之一是通过阻塞信号量。我曾经考虑过使用MVar来控制玩家。它在第一次转弯时运行正常,但随后会退化为胡言乱语。通道内信号量的概念(在它阻塞的方式上本质上是一个MVar)真的让我头疼。由于它确实会阻塞,因此也很难调试

    我对信号量的认识有点动摇。我这样做有意义吗

    代码可以在bitbucket存储库中找到。以下是获得正确代码/分支所需的步骤:

    git clone git@bitbucket.org:ndisidore/haskell-hangman.git
    git checkout block-sem
    
    或者

    要运行:
    runhaskell NetInterface.hs

    这将在端口3468上创建一个侦听套接字

    要作为客户端/播放器连接,请打开一个单独的终端并运行“telnet localhost 3468”。这需要做两次,每个玩家一次


    提前感谢。

    “它在第一个回合正确运行,但随后会退化为胡言乱语。”请您详细描述一下,好吗?理想情况下,每个游戏都是一个状态机,经历“等待玩家”、“等待单词”、“等待猜测”等状态。。。