[英]Python share single socket across different modules
我正在尝试建立一个套接字服务器,并在多个模块中使用它来将消息发送到客户端。
我在下面说的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中使用相同的实例将消息发布到端口。
您如何使用此对象?
在这行SocketServer.socket.bind(("",5003))
您正在显式绑定端口。
检查服务器ss -tpln
上的端口列表是否已绑定端口5003?
$ ss -tpln
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 50 0.0.0.0:46227 0.0.0.0:* users:
LISTEN 0 1 0.0.0.0:5003 0.0.0.0:* users:(("python",pid=23404,fd=3))
您不能在同一服务器上使用一个端口两次。 您会得到一个错误。
Traceback (most recent call last):
File "/home/user/sock2.py", line 2, in <module>
sock1 = SocketServer.getInstance()
File "/home/user/sock.py", line 16, in getInstance
SocketServer()
File "/home/user/sock.py", line 6, in __init__
SocketServer.socket.bind(("",5003))
OSError: [Errno 98] Address already in use
但是,如果您尝试从不同的服务器获取一个SocketServer的实例,则由于内存空间的不同,您将始终获得两个单独的端口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.