保持用户连接的最佳设计/方式是什么?

时间:2010-12-07 06:01:51

标签: c# silverlight wcf design-patterns polling

正在进行自我学习的POC,我想让我的用户以LIVE模式连接。例如,一个游戏,其中4个用户可以一次玩,这里我需要让这个用户连接到我的游戏。

M不擅长Socket类型的编程,并喜欢在服务方式中做到这一点。我知道的是'这样做的最佳方式是什么'。根据我最初的Brain Storming,我决定使用SilverLight(在浏览器中或浏览器外)作为前端[我没有问题]。

我在后端更关注。 要么我做一个处理程序或制作WCF服务或使用全双工服务并使用池化机制。作为一个随机的想法,我提出了一个Timer类型逻辑,它将在客户端结束后每隔10秒触发一次并获得状态,如

  • 现在轮到掷骰子了

  • 首页许多用户离开(如果是的话 其中一些人离开了)

  • 什么是连接用户状态 游戏就像得分/分数等 更新
       根据他的最终游戏视图

请在此处提供最佳答案,以帮助我了解这一点。

提前致意并表示感谢

修改

因为我需要更多反馈而启动Bounty。

FH

3 个答案:

答案 0 :(得分:11)

Fasih,

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

这模拟了双向通信,而不依赖于计时器。要实现此目的,您必须对服务器进行长时间运行的AJAX调用,并且只有在更新发生更改时才会返回调用。假设简单的网络聊天场景。 2个用户对服务器进行长时间的AJAX调用,并且两者都轮询公共媒体(比如DB),如果user1发送一些文本,它将得到更新,用户2正在等待的AJAX调用接收文本并返回。而且两个用户都会长时间通话,互相倾听。

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

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

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

请查看此post以获取支持网络论坛的浏览器。

答案 1 :(得分:1)

基本上,这是一个能够从服务器向客户端推送数据的问题。 所以我认为是订阅者发布者体系结构,您可以在服务器上为每个连接的用户创建一个队列(在db表中为ex),并让ajax调用一个将从表中提取数据的Web服务。

每条消息都应该被封装为客户端的命令。因此,您可以为客户端能够执行的每个操作使用不同的消息。 {command:display,text:“user blah blah已登录”}另一个命令看起来像{command:rolldice,text:“roll the dice”}

让我知道你的想法...

答案 2 :(得分:1)

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

此处有更多信息:WCF: Working with One-Way Calls, Callbacks, And Events

- 帕维尔