2011-12-28 58 views
1

我已经开始使用套接字进行游戏,并且已经开始使用小游戏进行测试。服务器是异步的,它运行良好,但并不好,所以我在寻找那些在应用中获得好结果的人的指针。插槽的实现指针

场景: 在应用程序中我连接到Application_Launching/Application_Activated服务器和Application_Closing/Application_Deactivated断开。 我注意到,在MSDN上的“Tic-Tac-Toe Over Sockets示例”中,每当数据已发送到应用程序时,它们都会关闭服务器上的套接字,并且每次将数据从应用程序发送到应用程序时连接到服务器。

讨论: 人们是否更喜欢管理应用程序生命周期事件中的连接?对于每个操作来说,打开/关闭套接字似乎很奇怪,就像他们在样本中所做的一样。似乎取消了首先使用套接字的优势。

场景: 假设我们正在实施某种比较长时间的配对方法。以20秒为例。

讨论: 当客户端请求的对手,你宁愿循环的客户名单,并定期睡觉,直到合适的对手已经发现了什么?或者你会推荐将客户端添加到寻找对手的客户端池中,并定期在一个单独的线程中循环访问?

底线是,如果有人使用套接字成功地实施了一个Windows Phone应用程序/游戏,我很想得到你如何处理之类的信息:在

  • 连接生命周期
  • 长期运行的操作服务器
  • 客户端“随时”退出应用程序,包括在服务器上执行长时间运行的操作时。

回答

0

关于打开/关闭:在它每次操作后关闭套接字

MSDN样本是大多数人可能使用的一个整洁的实用方法。但是在socket编程中没有正确的方法。其实有很多!

关于线程:

  • 如果你使用(同步)阻塞的方法,如Listen然后循环和睡眠是一个坏主意。你不能取消一个阻塞方法。
  • 如果您使用(异步)非阻塞方法,如BeginSendBeginListen 那么不需要线程。
+0

关于打开/关闭套接字:关闭套接字似乎不切实际,当您想在没有客户端发起“对话”的情况下将某些内容发送给客户端时。关于线程:是的,我目前正在使用非阻塞版本(BeginX/EndX),而没有任何其他线程。我在想那里的配对情景。如果最好在BeginReceive回调中循环客户端列表(有一些睡眠),直到找到合适的对手,或者将它们标记为“寻找对手”,然后有一个单独的线程来处理匹配。 – trydis 2011-12-28 11:40:57

+0

对不起,我不明白你的问题的细节。在这种情况下,我认为所有的客户端都可以连接到服务器,但他们的连接应该保持打开状态。当找到匹配的对手时,通过相应的套接字发送消息(然后关闭它)。如果客户端也在使用非阻塞方法,那么他们会将套接字打开,知道他们处于等待状态,直到他们收到了消息。而对于线程问题,我将使用单个线程(大厅)循环等待客户端。我认为这两种方法的结合给了你更多的选择。 – Bijan 2011-12-28 20:31:25

+0

对于游戏本身,你需要找出一种方式,所有的客户端总是开始对话而不是服务器。这样您可以在每次对话后关闭套接字。你当然可以将插座打开直到游戏结束。但根据我在套接字方面的经验,持续时间短而且数量多的话更容易处理。 – Bijan 2011-12-28 20:36:04

0

有关异步套接字编程检查开源网络通信库的好例子,networkComms.net

+0

谢谢,我已经简要地看过它,并会在稍后阅读。但是,最大的问题是优雅地处理客户端(电话),这可以在任何时候“重新启动”应用程序,稍后恢复,在视图之间来回导航。以一种好的方式处理这个问题并通知对手现在让我头痛。 – trydis 2011-12-28 13:25:59