c++ - HTTP 流服务器 : threads?

标签 c++ http stream

我已经在这里写了我想创建的 http 聊天服务器:Alternative http port? 此 http 服务器应将文本流式传输到网站上同一聊天室中的每个用户。浏览器将保持连接并等待进一步的 html 代码。 (是的,浏览器不会拒绝连接)。

我有一个新问题:因为这个聊天服务器不需要接收来自客户端的信息,所以在服务器发送第一个响应后不需要监听客户端。新的聊天消息将通过新连接发送到服务器。 所以我可以打开 2 个线程,一个等待新客户(或新消息),一个用于 html 流。 这是一个好主意还是我应该为每个客户端使用一个线程?当有很多聊天用户在线时,我认为只有一个线程/客户端不是一件好事,因为服务器应该处理与自己房间的多个不同聊天。

3 种可能性: 1. 所有客户端的一个线程,向每个客户端连续发送文本 - 应该不会有太多延迟,因为它只是文本 这将是这样的:user1.send("text");user2.send("text"),... 2. 每个聊天或聊天室一个线程 3. 每个聊天用户一个线程 - ...很多...

谢谢,我还没有对套接字做太多 ;)。

最佳答案

现在,您似乎在考虑给定的线程总是执行给定的(类型的)任务。虽然这种基本设计可以有意义,但要生产像这样的可扩展服务器,它通常不能很好地工作。

通常稍微抽象一点的观点效果更好:您有需要完成的任务,以及执行这些任务的线程——但线程并不真正“关心”它执行的是什么任务。

从这个角度来看,您只需要创建某种数据结构来描述需要完成的每项任务。当你有一个你想完成的任务时,你填写一个数据结构来描述这个任务,然后把它交给完成。在某处,有一些线程执行任务。

在这种情况下,线程的确切数量几乎变得无关紧要——它是您可以(并且正在做)调整以适应可用 CPU 核心数量、任务类型等的东西,而不是影响基本的东西程序设计。

关于c++ - HTTP 流服务器 : threads?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2357596/

相关文章:

python - 通过 TCP 查看 h264 流

c# - COM 基本链接

r - 用于确定 Microsoft Azure API key 区域的端点

javascript - 如何每 N 秒安排一次 ajax 调用?

ruby-on-rails - Rails-api HTTP token 认证

javascript - 是否有与 Node.js 一起使用的stream.on ('data' )类似的.NET Core?

Java 打印字符串 C++ 等价物

c++ - 检查 C++ 类是否公开继承自带有匿名参数的模板类

c++ - 在 TCP 线程服务器 C++ 中传输文件

java - 在 Java 中对输入/输出流进行加密/解密?