如何使用外部服务器作为上行链路并同时托管 Web 应用程序?

Posted

技术标签:

【中文标题】如何使用外部服务器作为上行链路并同时托管 Web 应用程序?【英文标题】:How to use an external server as an Uplink and to host the web app simultaneously? 【发布时间】:2021-04-27 20:05:59 【问题描述】:

我不太熟悉 Anvil 服务器在服务器、上行链路和客户端之间的身份验证和通信方面是如何工作的。不过,我会尽量解释这个问题,请原谅我的英语:

1- 我在 anvil 在线编辑器上创建了一个简单的“Hello World”应用程序,然后我对其进行了测试,它运行良好。

2- 我使用外部上行链路功能将我的服务器脚本保存在远程服务器上,一切正常,代码如下:

from ._anvil_designer import Form1Template
from anvil import *
import anvil.server

class Form1(Form1Template):

  def __init__(self, **properties):
    # Set Form properties and Data Bindings.
    self.init_components(**properties)

  def button_1_click(self, **event_args):
    """This method is called when the button is clicked"""
    self.message_label.text = anvil.server.call('get_name', self.name_box.text)
    pass

  def text_box_3_pressed_enter(self, **event_args):
    """This method is called when the user presses Enter in this text box"""
    pass

  def sum_click(self, **event_args):
    """This method is called when the button is clicked"""
    self.result.text = anvil.server.call('add_nums', self.num1.text, self.num2.text)
    pass

这是在外部上行链路上运行的服务器脚本:

import anvil.server
anvil.server.connect("UPLINK DERIVED FROM ANVIL ONLINE")

@anvil.server.callable
def get_name(name):
  response = "Hello from the server, %s!" % name
  return response

@anvil.server.callable
def add_nums(num1,num2):
  result = int(num1)+int(num2)
  return result

anvil.server.wait_forever()

3- 现在,我尝试通过 git 在线克隆 Anvil 上的应用程序,以便完全从外部服务器托管它:

git clone ssh://bla@bla.bla@anvil.works:2222/RN35GHXNR4UHW77W.git Hello_World

anvil-app-server --app Hello_World --origin https://somewhere.domain.com

到目前为止一切顺利,应用程序通过外部 URL 在浏览器上正常加载

4- 最后,当我输入一些数据并按下按钮时,我得到了这个丑陋的错误:

[ERROR anvil.app-server.run] Error report from client code:
NoServerFunctionError: No server function matching "get_name" has been registered
Traceback:
  app/Hello_World/Form1/__init__.py:15

^CTraceback (most recent call last):
  File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/home/melsayeh/env/lib/python3.8/site-packages/anvil_downlink_host/run.py", line 4, in <module>
    anvil_downlink_host.run_downlink_host()
  File "/home/melsayeh/env/lib/python3.8/site-packages/anvil_downlink_host/__init__.py", line 474, in run_downlink_host
    time.sleep(5)

【问题讨论】:

【参考方案1】:

当您在本地启动应用服务器时,您需要传递要用于该应用的上行链路密钥。

然后您需要将相同的密钥添加到上行链路脚本中的连接调用。您还需要在该调用中传递指向您的应用服务器的 URL 参数。

您可以在以下位置查看应用服务器的选项,包括上行链路密钥:

https://github.com/anvil-works/anvil-runtime#advanced-configuration

【讨论】:

以上是关于如何使用外部服务器作为上行链路并同时托管 Web 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Snapdragon MSM8960 SoC 在通话中注入上行链路音频

在 IIS 中托管时如何从代码配置 WCF 服务?

关于lte物理层的上行和下行链路

将 pcap 数据导出到 csv:时间戳、字节、上行链路/下行链路、额外信息 [关闭]

如何从外部访问托管在 kubernetes 集群上的 mongodb 副本集?

想要将 WCF Web 服务作为 Windows 服务托管,而不是在 IIS 中托管