问题标签 [hotswap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
versioning - 寻找具有热代码交换的编程平台
我目前正在就如何在程序运行时升级程序进行头脑风暴。(不是在调试时,一个“生产”系统。)
但它需要做的一件事是,将更改的源代码或编译后的字节码实际提交到正在运行的进程中。
伪代码
首先,我想实现系统在没有面向对象复杂性的情况下工作。这导致了以下要求:
- 更改函数的源代码或字节码
- 删除函数
- 添加新功能
- 更改函数的签名
使用 .NET(和其他),我可以通过 IoC 注入一个类,从而可以更改源代码。但是加载会很麻烦,因为一切都必须在程序集中或通过 Emit 创建。也许使用Java会更容易?我认为整个 ClassLoader 是可替换的。
使用 JavaScript,我可以实现许多目标。只需评估一个新函数 (MyMethod_V25) 并将其分配给 MyClass.prototype.MyMethod。我认为人们也可以使用“del”以某种方式删除功能
哪个通用平台可以处理这样的事情?
erlang - 在 Erlang 的 gen_server 中实现代码交换
我希望在 gen_server 上使用 Erlang 的热代码交换功能,这样我就不必重新启动它。我该怎么做?当我搜索时,我只能找到一篇提到我需要使用gen_server:code_change
回调的文章。
但是,我真的找不到任何关于如何使用它的文档/示例。非常感谢任何帮助或资源链接!
python - 在实例方法中更改类实例
任何想法是否有办法使以下代码工作
类似于以下内容,可安全用于更复杂的对象(如 django 模型,以热交换实例所指的 db 条目)
erlang - 除了 Erlang 之外的其他语言是否有能力将代码发送到正在运行的实例?
我刚刚了解到 Erlang 可以使用“nl”命令将代码和模块远程加载到集群的所有实例上。任何其他语言都可以做到这一点吗?
java - “热代码替换”不起作用——Eclipse 不会更改 JBoss 上的任何代码
我目前在 Eclipse Galileo 和 JBoss 4.2.3 上遇到“热代码替换”问题。
在其他应用程序中,我在本地 JBoss 上运行了一个扩展的 Java WAR。构建它的项目由 Maven 管理。我使用 Maven 目标 war:exploded 构建项目,然后使用 ANT 脚本将该目录复制到 JBoss。
当我现在运行应用程序并在代码中的任何位置设置断点时,Eclipse 会在调试模式下正确地停止在该行。但是当我对源文件进行更改并保存它时,Eclipse 不会将此更改应用于 JBoss。例如,当我将普通代码行添加到注释中时,调试器仍然会跳过该注释,就好像它是普通 Java 代码一样。或者当我删除一行时,调试器似乎与文件不同步并开始越过括号。
但我也没有收到任何“热代码替换错误”消息。在我看来,Eclipse 将更改应用于源文件,但没有将其应用于 JBoss。
为了使热代码替换起作用,是否必须打开任何特殊首选项?或者我如何构建应用程序并将其部署到 JBoss 是否有任何错误?
erlang - Erlang 中的代码热交换
我最近在 InfoQ 上看到了一个关于 Erlang 的视频,在该视频中,一位创建者展示了如何替换消息循环的行为。
他只是发送一条包含新版本消息循环代码的 lambda 的消息,然后调用它而不是再次调用旧循环。
Erlang 中的代码热交换指的是什么?还是其他一些更原生的功能?
eclipse - Eclipse 热代码替换失败 - 重新发布 Web 应用程序
我在 Tomcat 上将热插拔 java 调试功能与 Web 应用程序一起使用。在更改了一些类签名之后,我得到了“热代码替换失败”Eclipse 对话框——我明白这一点。
在这种情况下,我想要的是重新发布应用程序(我可以这样做)并使用新部署的代码。但是调试器仍然会抱怨,直到我重新启动服务器。因为其他应用程序和长时间启动我不想要那样。
有没有办法告诉调试器,新的类版本已经重新加载到新的 webapp 类加载器中,并且可以保存以继续?
谢谢。
c++ - c++ SERVER 应用程序的在线更新机制
找不到有关此主题的任何内容。
我有一个 Windows TCP C++ 服务器应用程序,我想不时更新它。
正如您显然理解的那样,这会带来一个问题 - 从用户的角度来看,服务器应该是 24/7 的。
更新时,还希望保持与用户的当前 TCP 连接。
我一直在考虑一个类似模块的系统,例如套接字处理模块将驻留在“sockets.dll”中,服务器的逻辑将驻留在“logic.dll”中。
采用这种方法似乎打开了潘多拉的盒子。
- 我将如何进行模块的实际“交换”?想象一下,X 工作线程不断地从一个模块向另一个模块发送数据——交换时我需要一种(轻快)的方式来暂停/暂停它们;也许是信号?
- 协议版本,甚至函数签名在更新时可能会发生变化。如何处理?
- 其他问题,例如未被注意到的逻辑错误。
- 谁知道会出现其他问题。
除了上述之外,我还担心如何更新 10 台服务器?我的意思是,它们都相互连接,相互交流。
如果更新引入了协议修改,它可能会导致巨大的问题,在这种情况下,我需要将整个集群(服务器)作为一个整体进行更新;关闭整个操作?这听起来不对,根本不对!我怎么做?我在这里缺少哪些概念以及如何学习它/它们?
我能做些什么吗?
你会怎么做?你做过这样的事吗?
您知道解决问题的任何机制/文章/项目/源示例/等吗?
任何有价值的建议都非常受欢迎!!
python - 使用 Python 进行热重载/交换
我希望代码更改在开发过程中立即生效。如何检测更改的文件并在正在运行的 Python (2.7) 应用程序中重新加载它们?
编辑:
在阅读了“Ivo van der Wijk”链接的页面后,我认为最好在代码更改时重新启动 Web 应用程序——就像 Django 那样。所以实际的问题是:如何监控文件修改?