【问题标题】:What is the best Design/Way to keep user connected?保持用户联系的最佳设计/方式是什么?
【发布时间】:2010-12-07 06:01:51
【问题描述】:

我正在开发一个用于自学的 POC,我希望在其中让我的用户以 LIVE 模式保持联系。例如,一个游戏,其中 4 个用户可以同时玩,这里我需要让这个用户连接到我的游戏。

M 不擅长 Socket 类型的编程,并且喜欢以服务方式进行。我想知道的是“最好的方法是什么”。根据我最初的头脑风暴,我决定我将使用 SilverLight(在浏览器中或浏览器外)作为前端 [我对此没有任何问题]。

我更关心后端。 我要么制作一个处理程序,要么制作一个 WCF 服务,要么使用全双工服务并为此使用池机制。作为一个随机的想法,我想出了一个 Timer 类型的逻辑,它会在客户端每 10 秒后触发一次并获得类似的状态

  • 现在轮到掷骰子了吗

  • 许多用户离开了家(如果 他们中的一些人离开了)

  • 什么是连接用户状态 像那里的得分/积分等游戏和 更新
    游戏视图按此结束

请在此处提供您最好的答案,这将有助于我了解这一点。

提前致谢

编辑:

开始赏金,因为我需要更多反馈。

FH

【问题讨论】:

    标签: c# silverlight wcf design-patterns polling


    【解决方案1】:

    法西赫,

    由于 HTTP 是无状态的,因此您无法通过代码进行双向通信。但是,如果您使用 AJAX,则有一种解决方法。正如您所说,计时器是一种方式。另一种称为COMET 或反向AJAX。

    这模拟了不依赖定时器的双向通信。要完成此操作,您必须对服务器进行长时间运行的 AJAX 调用,并且只有在有要更新的更改时才返回调用。假设简单的网络聊天场景。 2 个用户对服务器进行了长时间的 AJAX 调用,并且都在轮询公共介质(比如 DB),如果 user1 发送一些文本,它将被更新,并且用户 2 的等待 AJAX 调用获取文本并返回。再次,两个用户都会进行长时间的通话以互相倾听。

    由于您已经决定继续使用 silverlight,您可以使用 WCF 双工通道来模拟 2 路通信。正如我之前解释的,不要使用计时器逻辑。如果你轮询服务器 10 秒,它不是即时的(任何事情都可能在 10 秒内发生在游戏中),如果你每秒轮询,它会增加服务器负载。

    因此避免使用计时器逻辑并使用长时间运行的 AJAX 调用。

    如果您正在寻找 WCF 双工通道以外的选项,HTML5 web sockets 和 COMET 是其他选择。

    查看此post 了解支持网络 socoket 的浏览器。

    【讨论】:

    • 很好的回复。我喜欢。由此我可以制作自己的 Loon 运行 Ajax 调用机制。让我看看。会更新
    • 现在只需阅读您的答案..比我的好..如果使用计时器,服务器负载会更多..
    • 伙计,我说我现在才读到你的答案..如果我读过它,我就不会费心评论我所做的,并说你的答案比我的好....只是为了出于礼貌..
    • 没有问题.. 一直发生在我身上:D
    • 你知道在服务器上运行 ajax 调用的时间有多长吗?或者有什么好的文章吗?
    【解决方案2】:

    基本上这是一个能够将数据从服务器推送到客户端的问题。 所以我在想的是一个订阅者发布者架构,你可以在服务器上为每个连接的用户创建一个队列(在一个数据库表中),并有一个 ajax 调用将从表中提取数据的 Web 服务。

    每条消息都应该封装为客户端的命令。因此,您可以为客户端能够执行的每个操作使用不同的消息。 {command:display,text:"user blah blah has logged in"} 另一个命令可能类似于 {command:rolldice, text:"roll the dice"}

    让我知道你的想法......

    【讨论】:

      【解决方案3】:

      如果您决定使用 WCF,那么我建议您使用回调。

      更多信息在这里:WCF: Working with One-Way Calls, Callbacks, And Events

      -- 帕维尔

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多