多服务器
大约 2 分钟
多服务器
创建多个窗口,其中一些有自己的服务器,并且在调用webview.start()
前后都会创建这些窗口。
import bottle
import webview
# 我们将使用全局列表来记录我们的窗户信息,以便我们的网页应用可以向我们提供有关它们的信息
# 关于它们的信息
windows = []
# 一个简单的函数用于格式化描述服务器的文本
def serverDescription(server):
return f"{str(server).replace('<','').replace('>','')}"
# 使用Bottle定义几个简单的网络应用程序
app1 = bottle.Bottle()
@app1.route('/')
def hello():
return '<h1>第二窗口</h1><p>这是一个网页应用,并且有自己的服务器。</p>'
app2 = bottle.Bottle()
@app2.route('/')
def hello():
head = """ <head>
<style type="text/css">
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: center;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
</style>
</head>
"""
body = f""" <body>
<h1>第三窗口</h1>
<p>这是一个另一个网页应用,并且有自己的服务器。它是在调用`webview.start()`之后启动的。</p>
<p>服务器描述: </p>
<table>
<tr>
<th>窗口</th>
<th>对象</th>
<th>IP 地址</th>
</tr>
<tr>
<td>全局服务器</td>
<td>{serverDescription(webview.http.global_server)}</td>
<td>{webview.http.global_server.address if not webview.http.global_server is None else 'None'}</td>
</tr>
<tr>
<td>第一个窗口</td>
<td>{serverDescription(windows[0]._server)}</td>
<td>{windows[0]._server.address if not windows[0]._server is None else 'None'}</td>
</tr>
<tr>
<td>第二个窗口</td>
<td>{serverDescription(windows[1]._server)}</td>
<td>{windows[1]._server.address}</td>
</tr>
<tr>
<td>第三个窗口</td>
<td>{serverDescription(windows[2]._server)}</td>
<td>{windows[2]._server.address}</td>
</tr>
</table>
</body>
"""
return head + body
def third_window():
# 在循环启动后创建一个新的窗口
windows.append(webview.create_window('第三个窗口', url=app2))
if __name__ == '__main__':
# 主窗口
windows.append(
webview.create_window(
'第一个窗口',
html='<h1>第一个窗口</h1><p>这是一个静态 HTML 页面,并且仅使用全局服务器进行 API 调用。</p>',
)
)
windows.append(webview.create_window('第二个窗口', url=app1, http_port=3333))
webview.start(third_window, http_server=True, http_port=3334)