【发布时间】:2015-07-15 22:32:01
【问题描述】:
我正在创建一个 python 服务器,它应该处理来自端口 9090 上的远程主机的连接以及仅来自端口 9091 上的本地主机(发送数据的 GUI)的连接。 我认为问题出在 socket.listen(backlog) 中,因为这会阻止一切。 那么有没有办法让socket1.listen(backlog)和socket2.listen(backlog)同时运行呢? 另外,制作一个用于从 GUI(用 Java 编写)接收数据的套接字是不是一个好主意,最重要的是安全?
【问题讨论】:
-
为什么不使用线程?第一个套接字不会阻塞另一个套接字。
-
您的问题有些含糊,但是有可能,您需要另一个线程,最好是每个套接字都有一个线程。尝试将套接字功能包装在一个新类中,从 Thread 继承该类,然后为每个端口创建一个新类实例
-
您是在使用现有的 Python Web 服务器还是自己编写?我不会使用套接字来亲自接收 gui 数据。我认为您正在寻找
interprocess communications,例如 D-Bus、XML-RPC 等。 -
是的,在一个套接字上从 python 发送数据并在 Java 中接收它是安全的。它也被认为是进程间通信的一个不错的选择,这就是你在这里解释的原因
-
您可以通过在侦听套接字上设置
socket.setblocking(0)来使listen/accept不阻塞。然后您可以使用select等待事件。有一些细节需要处理,但应该相当容易。当然,您也可以使用为您完成此类工作的库。一种选择是扭曲的:twistedmatrix.com/trac。请参阅他们的回显服务器示例 (twistedmatrix.com/trac/#echoserver) 以开始使用。
标签: python multithreading sockets