我已经开始使用套接字进行游戏,并且已经开始使用小游戏进行测试。服务器是异步的,它运行良好,但并不好,所以我在寻找那些在应用中获得好结果的人的指针。插槽的实现指针
场景: 在应用程序中我连接到Application_Launching/Application_Activated服务器和Application_Closing/Application_Deactivated断开。 我注意到,在MSDN上的“Tic-Tac-Toe Over Sockets示例”中,每当数据已发送到应用程序时,它们都会关闭服务器上的套接字,并且每次将数据从应用程序发送到应用程序时连接到服务器。
讨论: 人们是否更喜欢管理应用程序生命周期事件中的连接?对于每个操作来说,打开/关闭套接字似乎很奇怪,就像他们在样本中所做的一样。似乎取消了首先使用套接字的优势。
场景: 假设我们正在实施某种比较长时间的配对方法。以20秒为例。
讨论: 当客户端请求的对手,你宁愿循环的客户名单,并定期睡觉,直到合适的对手已经发现了什么?或者你会推荐将客户端添加到寻找对手的客户端池中,并定期在一个单独的线程中循环访问?
底线是,如果有人使用套接字成功地实施了一个Windows Phone应用程序/游戏,我很想得到你如何处理之类的信息:在
- 连接生命周期
- 长期运行的操作服务器
- 客户端“随时”退出应用程序,包括在服务器上执行长时间运行的操作时。
关于打开/关闭套接字:关闭套接字似乎不切实际,当您想在没有客户端发起“对话”的情况下将某些内容发送给客户端时。关于线程:是的,我目前正在使用非阻塞版本(BeginX/EndX),而没有任何其他线程。我在想那里的配对情景。如果最好在BeginReceive回调中循环客户端列表(有一些睡眠),直到找到合适的对手,或者将它们标记为“寻找对手”,然后有一个单独的线程来处理匹配。 – trydis 2011-12-28 11:40:57
对不起,我不明白你的问题的细节。在这种情况下,我认为所有的客户端都可以连接到服务器,但他们的连接应该保持打开状态。当找到匹配的对手时,通过相应的套接字发送消息(然后关闭它)。如果客户端也在使用非阻塞方法,那么他们会将套接字打开,知道他们处于等待状态,直到他们收到了消息。而对于线程问题,我将使用单个线程(大厅)循环等待客户端。我认为这两种方法的结合给了你更多的选择。 – Bijan 2011-12-28 20:31:25
对于游戏本身,你需要找出一种方式,所有的客户端总是开始对话而不是服务器。这样您可以在每次对话后关闭套接字。你当然可以将插座打开直到游戏结束。但根据我在套接字方面的经验,持续时间短而且数量多的话更容易处理。 – Bijan 2011-12-28 20:36:04