【发布时间】:2019-04-22 05:11:37
【问题描述】:
我正在尝试建立一个套接字服务器并在多个模块中使用它来向客户端发送消息。
我在socket_server.py 中写了一个单例套接字,如下所示。
import socket
class SocketServer:
_instance=None
def __init__(self):
SocketServer.socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
SocketServer.socket.bind(("",5003))
SocketServer.socket.listen(1)
SocketServer._instance=self
def post(self,message):
SocketServer.socket.send(message)
@staticmethod
def getInstance():
if not SocketServer._instance:
SocketServer()
return SocketServer._instance
我有一个模块(比如 module_1.py),我在其中使用上述套接字服务器
from socket_server import SocketServer
socket_server=SocketServer.getInstance()
我还有一个模块(比如 module_2.py),我想在其中使用我在 module_1.py 中创建的同一个套接字服务器。
from socket_server import SocketServer
socket_server=SocketServer.getInstance()
但是当我尝试同时执行这两个脚本时,我得到了两个不同的套接字服务器实例。
我希望能够创建一个单独的套接字服务器,在 module_1.py 和 module_2.py 中使用相同的实例来将消息发布到端口。
【问题讨论】:
-
"当我尝试同时执行这两个脚本时" 您正在分别运行这些脚本吗?在解释器的两个实例中?那么你永远不会得到套接字的对象。
-
您正在尝试将多个 python 进程绑定到单个端口。虽然这在技术上是可行的,但我认为这不是您想要做的;通常,您将单个进程绑定到 IP:PORT 套接字。我也看不出将多个服务器进程绑定到同一个端口将如何帮助您向客户端发送消息。
标签: python python-3.x sockets python-sockets