【问题标题】:Can I use the Python SocketServer class for this implementation?我可以为此实现使用 Python SocketServer 类吗?
【发布时间】:2014-11-10 16:44:56
【问题描述】:

我意识到我需要更改我正在编写的文件同步程序的设计。

目前,我的程序如下:

1) 客户端连接到服务器(并经过验证)

2) 如果客户端通过验证,则创建一个线程并使用客户端连接的套接字开始循环

3) 如果客户端或服务器上的文件发生更改,则通过该套接字发送更改(使用 select 进行异步通信)

我的代码很糟糕,因为我在使用一个套接字进行文件传输或使用一个套接字进行每个文件传输之间纠结。任何一种情况(在我看来)都可以,但是对于第一种情况,我必须创建某种协议来确定哪些字节去哪里(某种标题),而对于第二种情况,我必须创建新的套接字在一个新线程上(不需要再次验证),这样文件就可以在每个线程上发送,而不必担心异步传输。

我更愿意做第二个选项,所以我正在研究使用 SocketServer。 SocketServer.ThreadingTCPServer 和 SocketServer.ThreadingMixIn 能解决这类问题吗?我很难考虑它,因为我会假设 SocketServer.ThreadingMixIn 适用于新连接的客户端,除非我以某种方式有一个“外部”套接字服务器来服务“内部”套接字服务器?

【问题讨论】:

    标签: python sockets socketserver


    【解决方案1】:

    SocketServer 将为您工作。您为每个要侦听的端口创建一个 SocketServer。您的选择是您是否有一个侦听器来处理客户端/服务器连接以及每个文件连接(您需要某种标头来区分)还是两个侦听器来分离客户端/服务器连接和每个文件连接(您需要仍然需要一个标题,以便您知道哪个文件进入)。

    或者,您可以选择像 zeromq 这样为您提供消息传输的东西。

    【讨论】:

    • 您能否详细说明我如何使用 SocketServer 执行“两个侦听器,将客户端/服务器连接和每个文件连接分开”?你基本上重申了我的问题..
    • 我需要将套接字从一个监听器传递给另一个监听器,对吧?
    • 创建两个线程,其中一个创建线程套接字服务器用于“主要”通信,另一个创建用于侦听文件副本。
    • 有很多方法可以让复制监听器知道它应该做什么。也许客户端会发送一个带有 '\n' 分隔的字符串,其中包含 tget 文件名。或者,如果您担心安全性,主侦听器可以向客户端发送一个加密的 blob,然后客户端会在实际数据之前将其发送回副本侦听器。
    • 如果连接被正确的用户验证,我只想创建一个线程。然后每次需要上传或下载文件时,都会创建另一个线程。那么我可以让一个 SocketServer.ThreadingTCPServer 创建另一个具有相同连接的 SocketServer.ThreadingTCPServer 吗?
    猜你喜欢
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 2013-08-30
    • 2021-10-03
    • 2022-05-26
    相关资源
    最近更新 更多