【问题标题】:How many sockets to create on the client side?在客户端创建多少个套接字?
【发布时间】:2018-03-26 04:21:52
【问题描述】:

我看到一些应用程序使用多个套接字。例如,对于聊天,他们使用唯一的套接字,而对于文件上传,他们使用其他套接字等。当可以在一个套接字中完成时,为什么需要这个过程?是因为他们处理连接并在每次接受调用后打开一个新的连接槽的方式吗?

我正在开发 IOCP 聊天应用程序,我对这个方案感到困惑。如果我想处理连接,我为每个客户端设置 1 个套接字,但如果客户端发送文件,我的服务器无法为文件上传分配内存,因为我在处理新接受的连接后执行此操作,因此存储变得复杂内存池中文件所需的内存,专门用于清理和释放内存。如果我仅在客户端使用 1 个套接字,是否需要根据命令重新分配内存,以便不会覆盖其他缓冲区?或者最简单的方法是为每个占用大量内存的操作(如文件发送图像等)使用 1 个套接字,以便我的服务器会自动为每个新连接分配唯一的缓冲区?

我什么时候应该在 IOCP 中使用 CRITICAL SECTIONS?在工作线程中,如果我想在收到一些数据后访问缓冲区,然后将其复制到收到的总缓冲区中。在从临时缓冲区复制到所有缓冲区之前是否需要进入关键部分,以便其他线程不会干扰这些值?

【问题讨论】:

    标签: c++ multithreading sockets thread-safety iocp


    【解决方案1】:

    每次有来自客户端的请求时,服务器端的侦听器套接字都会创建一个新套接字。此时应该创建一个新线程来与该客户端通信:它将处理与给定客户端的一对一通信。所有必要的资源都应该在这个线程中分配。在客户端,您有一个处理服务器的线程。

    【讨论】:

    • 不建议为每个连接创建线程,并且不能很好地扩展。线程创建有很多开销。我的问题是我是否需要为客户端的不同操作创建更多套接字?像文件共享图像共享文本聊天等每个都有其唯一的套接字,因此它将是异步过程。
    猜你喜欢
    • 1970-01-01
    • 2017-08-11
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    相关资源
    最近更新 更多