我是多线程Web服务器编程的新手 现在,我正在编写一个服务器程序,该程序:
我的想法是使用while循环从套接字接收消息,然后处理消息并发送响应。
问题是,处理消息需要时间,我可能会在短时间内收到多条消息。因此,如果我在此while循环中调用process_message()函数并等待其完成,它将被阻塞,并且我肯定会浪费时间。所以我需要非阻塞方式。
我做了一些研究。我以为我可能会使用两种常见的技术:线程池和消息队列。
对于线程池,我的想法类似于以下伪代码:
def process_message():
process_message // takes time
send_response(socket)
while True:
message = recv(socket)
thread = thread_pool.get_one()
thread.start(target=process_message)
对于消息队列,我不确定,但是我的想法是使用生产者线程和使用者线程:
def consumer:
// only one consumer thread?
message = queue.poll()
consumer_thread.process_message(message)
send_response(socket)
while True:
// only one producer thread?
message = recv(socket)
producer_thread.put_message_to_queue()
希望我的想法很明确。谁能提供一些典型的解决方案?
然后,更棘手的部分是,关于如何实现ACK机制的任何想法?
谢谢!
答案 0 :(得分:1)
这是相当广泛的,因为还有很多东西要执行。
一般的想法确实是实现:
但是每个部分都需要大量工作,并且可以通过不同的方式(select
,TCPServer
或第一个处理接受套接字的线程来实现,该数据结构用于存储等待消息的消息)确认第三个,并在第二个中实现哪个池)。我进行了一些测试,并意识到完整的答案将远远超出此站点上的预期。恕我直言,您最好将问题分解成较小的可回答部分,并始终将其保留为一般情况。
您还应该说传入的消息是在收到消息后立即被确认还是在响应中被隐式确认。