如何让两个 Haskell 程序通过互联网相互通信?

问题描述 投票:0回答:1

标题中的问题相对简单,但我不知道答案有多复杂,也不知道问题本身是否由于某种原因不适定,所以下面是有关用例的更多详细信息,使我认为我需要我在标题中问的内容。


(以下信息仅提供我的用例信息,其中的任何问题不需要答案。)

我写了一个简单的基于终端的贪吃蛇游戏,我的目的是让它成为多人在线游戏,作为学习一些我还不知道的新东西的借口。

这个想法是可执行文件,我们称之为

snake

  • 无需进一步参数,将开始单人游戏,并打印要共享的 URL,
  • 然而,使用 URL 作为参数,会尝试加入共享会话中的现有游戏。

共享会议可能意味着不同的事情,我还没有考虑完整的计划;例如:

  • 游戏是否会只发生在一个玩家的进程上,该进程会接收其他玩家的按键,更新屏幕,然后仅向其他进程发送屏幕的增量?
  • 或者玩家会互相发送按键并各自独立玩游戏吗? (这需要游戏的编写方式使得两个或多个游戏不能不同步,因此听起来有点困难。)
  • 无论如何,不应该有主要/次要玩家,因为如果开始游戏并共享 URL 的玩家断开连接,其他玩家应该继续游戏(在单人游戏中,如果只剩下一个玩家),并且URL 应保持活动状态,以便其他玩家可以加入。

我看到 tty-share¹ 必须做类似的事情来共享终端,但我在 GitHub 页面中看到

通过互联网(在 NAT 之外)共享时,

tty-share
将连接到代理服务器,该服务器将调解参与者之间的通信。

这似乎不是我想要的,特别是与上面最后一个项目符号形成对比。


(1) 不,这不是 Haskell,但考虑到我对网络编程主题的了解,这可能是无关紧要的。

http haskell network-programming online-game
1个回答
0
投票

您可能对

distributed-process
Cloud Haskell 的实现感兴趣。它几乎肯定不会满足您的所有要求,但它确实处理了许多您可能不想重新发明的低级细节。 Jeffrey Epstein 的哲学硕士学位论文数据中心的函数式编程对此进行了详细描述。 (显然不是杰弗里·爱泼斯坦。)

© www.soinside.com 2019 - 2024. All rights reserved.