gpt4 book ai didi

Python SocketServer 从服务器发送消息

转载 作者:行者123 更新时间:2023-11-30 22:25:54 24 4
gpt4 key购买 nike

我在Python中使用TCP服务器,它实现了这个类:

class ThreadedTCPServer(SocketServer.ThreadingTCPServer):
pass

它的正常使用非常完美(启动服务器、处理请求等)。

现在 - 我需要在 TcpRequestHandler(SocketServer.BaseRequestHandler) 类中的 handle 函数之外向客户端发送消息。

我尝试使用以下技巧,即使用服务器的内部套接字(它适用于 UDP)-

tcp_server.client_socket.send(message)

但我收到此错误消息 -

socket.error: [Errno 10057] A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied

所以我认为 TCP 不可能。

还有其他办法吗?我假设某些服务器有时需要向客户端发送消息(不仅仅是对请求的响应),但我找不到好方法。

谢谢!

最佳答案

对于 TCP,您有两个常规选项:

  1. 向带外 (OOB) 客户端发送消息。在这种情况下,服务器单独连接到客户端,并且角色颠倒。客户端必须在端口上监听 OOB 消息,并在这方面充当服务器。从你的问题描述来看,你不想这样做,这很好。
  2. 实现一个协议(protocol),服务器可以通过该协议(protocol)向客户端发送消息以响应传入的消息。您将需要一种方法来多路复用额外的消息以及启动消息的任何预期返回值。您可以使用服务器上的共享队列来实现此目的。您将消息放入处理程序外部的此队列中,然后当处理程序响应您从队列中使用的消息并将它们插入到响应中时。

如果这听起来像您感兴趣的东西,我可以稍后编写一些示例代码。

两种方法各有利弊:

在(1)中,您有更多的套接字连接需要管理,并且您将客户端主机暴露给您可能不希望的连接。这些协议(protocol)更简单,因为它们没有被复用。

在 (2) 中,您只有一个 TCP 流,但必须多路复用 OOB 消息。如果客户端不定期联系服务器,那么延迟也会增加。

希望有帮助。

关于Python SocketServer 从服务器发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47395772/

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