gpt4 book ai didi

sockets - 在后台运行服务器,而应用程序执行其他操作

转载 作者:行者123 更新时间:2023-12-03 12:08:06 26 4
gpt4 key购买 nike

我正在尝试制作一个桌面应用程序,作为运行服务器的触发器。该应用程序(服务器)还将从客户端获取数据并将它们保存在服务器的计算机中。

我已经用flask和socketio在python中制作了服务器。客户也在工作。所以现在我要为服务器制作 GUI,以便非 IT 人员可以运行此服务器。

因此,我在 runServer 函数(单击“运行服务器”时调用)中注意到它确实有效并且运行了服务器。但是,当服务器正在运行时,我不能做任何其他事情。所以我尝试使用打印语句进行测试。

        print('hello')
self.sio.run(self.app, host = '0.0.0.0', port = 8090) #running the server
print('hello again')

'hello' 被打印了,但 'hello again' 没有
class Window(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
self.app = Flask(__name__)
self.sio = SocketIO(self.app)
self.port = 8090

def init_ui(self):
self.runServerButton = QPushButton('Run Server')
self.runServerButton.clicked.connect(self.runServer)

self.sayHiButton = QPushButton('Say Hi')
self.sayHiButton.clicked.connect(self.sayHi)

self.status = QLabel('Server running\nPlease enter address below to client(s)')
self.address = QLabel('ipaddress')

vBox = QVBoxLayout()
vBox.addWidget(self.runServerButton)
vBox.addWidget(self.sayHiButton)
vBox.addWidget(self.status)
vBox.addWidget(self.address)
self.status.hide()
self.address.hide()
vBox.addStretch()

self.setLayout(vBox)
self.setWindowTitle('SDS App')

self.setGeometry(1000, 500, 200, 200)
self.show()

def runServer(self):
ip = socket.gethostbyname(socket.gethostname())
self.address.setText(ip)
self.status.show()
self.address.show()
self.runServerButton.setEnabled(False)

print('hello')
self.sio.run(self.app, host = '0.0.0.0', port = 8090) #running the server
print('hello again')

@sio.on('hey waddup')
def on_waduup():
print('i\'m fine bro')
status.setText("I'm fine bro")

def sayHi(self):
print('Hi!')

if __name__ == '__main__':
app = QApplication(sys.argv)
a_window = Window()
sys.exit(app.exec_())

那么有没有办法在后台运行服务器?或者是否有对此的后门解决方案,例如制作一个运行两个文件的可执行文件;服务器和 gui(必须是另一个客户端)

谢谢!

最佳答案

sio.run()调用被阻塞,它启动 Web 服务器并且不返回。为了不阻塞 GUI 应用程序,您需要做的是在后台线程中进行此调用,这样您的按钮处理程序函数就不会被阻塞。它会是这样的:

def runServer(self):
# ...
print('hello')
self.sio.start_background_task(self.sio.run, host='0.0.0.0', port=8090)
print('hello again')
start_background_task() 的文档功能: https://flask-socketio.readthedocs.io/en/latest/#flask_socketio.SocketIO.start_background_task .

关于sockets - 在后台运行服务器,而应用程序执行其他操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57634845/

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