gpt4 book ai didi

c++ - 套接字 C++ - 非阻塞或选择方法

转载 作者:行者123 更新时间:2023-11-28 03:41:16 24 4
gpt4 key购买 nike

这是我经历过几次的事情,短暂休息后,我回来为客户申请,但在我实际实现任何事情之前只想记住一些事情。

我将在这里谈论多客户端服务器,它处理通过 TCP 连接到服务器绑定(bind)端口的客户端。

我记得使用 select() 、FD_ISSET、FD_ZERO、FD_SET 进行编码 - 它是接受和管理我服务器上连接的客户端列表的家庭方法 - 我记得它工作得很好,但这次是关于一个简单的 32 人角色扮演游戏 - 所以没有什么快节奏的,因此这里是 TCP。

简单的 GO_TO 数据包、天气变化、时间更新、文本消息、项目状态更改和退出、登录(广播)以及我现在无法找到的其他内容。

今天让我睡不着觉的是我真正应该选择什么来让这台服务器平稳运行(当谈到它的网络性能时)。

人们倾向于通过使用 ioctlsocket(..) 或其他一些“线程”怪人来谈论套接字的“非阻塞”方法,它们可以做到这一点,但您必须以不同的方式控制它们 - 是的我已经尝试过这个,并且看到了很多方法——处理应用程序中的许多线程——这真的有点过于复杂了..

我也见过那些 MSDN“ASYNCHROUNOUS”套接字,您可以从套接字中获取消息 - 但我认为这太多了。

所以我不是在写代码,而是想问,

  • 如果 select() 可以在谈到游戏服务器时发挥作用,比如说同时处理这 32 位玩家。我的意思是,根据您的经验,您如何看待这件事?或者我将不得不在最后回滚并在截止日期前修改整个服务器代码。

  • 执行 select/ioctlsocket 到底有什么区别?

  • 这两种方法的优缺点是什么?

非常感谢您对此的任何答复,我希望我能清楚地了解我的问题。

最佳答案

select-style 服务器可以轻松处理这种少量的并发客户端,即使在适度的硬件上也是如此。

将可读性放在首位,并根据您的经验选择最简单的解决方案。如果您过去曾使用 select 进行过类似的实现,那么不必担心性能。

根据我在阻塞 IO 方面的经验,在第一次尝试时很难获得正确的结果,然后是选择方式,但你的里程可能会有所不同。

关于c++ - 套接字 C++ - 非阻塞或选择方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9167226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com