问题标签 [robustness]
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.
c# - 关闭 System.Net.Sockets.TcpClient 会终止同一 IP 地址上其他 TCPClients 的连接
为了清楚起见,我在这里提到的所有 TCPClients 都不是我自己的类的实例,它们都是来自 Mono 的 .NET 4.0 实现的 System.Net.Sockets.TcpClient 的实例。
我有一台服务器正在监听客户端连接,就像服务器一样。每当它获得一个新客户端时,它都会创建一个新的 TCPClient 来处理新线程上的连接。我正在使用字典跟踪所有连接和线程。如果客户端断开连接,它会向服务器发送断开连接消息,关闭 TCPClient,删除字典条目,线程自然死亡。没有大惊小怪,没有混乱。服务器可以毫无问题地处理多个客户端。
但是,我正在模拟如果客户端断开连接,没有机会发送断开连接消息,然后重新连接会发生什么。我正在检测客户端是否重新连接了用户名系统(完成测试后会更安全)。如果我只是创建一个新的 TCPClient 并让旧的 TCPClient 运行,系统工作得很好,但是我有一堆无用的线程在占用空间并且什么都不做。懒鬼。
所以我尝试关闭与旧连接关联的 TCPClient。当我这样做时,新的 TCPClient 也会死掉,并且客户端程序会抛出此错误:
服务器抛出此错误:
所以用远程端点关闭旧的 TCPClient 说:192.168.1.10:50001
还使用远程端点打破新的 TCPClient 说:192.168.1.10:50002
所以这两个 TCPClient 对象具有相同的远程端点 IP 地址,但不同的远程端点端口。但是关闭一个似乎会阻止另一个工作。我希望能够关闭旧的 TCPClient 来进行清理,而无需关闭新的 TCPClient。
我怀疑这与 TCPClient 如何在低级别使用套接字有关,但对此没有任何真正的了解,我无法修复它。
client-side - 使用 Ember.js 开发的大型网站
我正在考虑使用 Ember.js 来开发我的新网站。
我不确定社区在大型项目中使用它的稳定性和程度。
- 你会推荐使用它吗?
- 你知道使用它的大网站吗?
谢谢,里奥
python - 加强python UDP服务器
我是 python (2.6/2.7) 的初学者,被投入到为现有 python 应用程序创建网络服务的深层次。
我已经启动并运行了一个 UDP 服务器,它工作得很好,但我正在寻求帮助,使其更加防弹。
这是我编写的基本代码,通常的标准样板:
首先,我知道套接字在某种意义上总是可用的,它不必监听,所以没有失败,你必须重新连接。这个对吗?
其次,recvfrom 返回数据的问题。检查它是否有效是一个简单 的“如果数据:那么”吗?
第三,最后,线程。一根线能炸出来吗?如果它确实重新启动它的最佳方法是什么?
欢迎任何其他提示。
(注意:我不能使用外部库,例如扭曲等)
c# - 使用 GetInvocationList 取消订阅事件处理程序
我的基类中有一些事件,我想在 IDisposable 或 Finalizer 中应用以下模式。
我会在每个事件中重复此代码一次。
这是处理取消订阅事件以防止内存泄漏的合理且可靠的方法吗?
linux - 我的脚本应该使用 cp 或 mv 来更健壮吗?
我有一个 bash 脚本(Scientific Linux)。该脚本必须对文件进行操作。假设“file.dat”(大约 1 GB 大小)一段时间后,脚本重新启动并执行以下操作:
备份文件。然后一个进程启动并覆盖“file.dat”
为了安全起见(断电或任何意外情况)。最好的选择是什么: cp 或 mv ?谢谢。
android - 在android应用程序的内存中存储数组列表(以稳健的方式)
我正在开发一个 android 应用程序(与旧的 androids 以及新的 androids 一起工作,所以没有 3.0 技巧),我想将提交数据存储在我的应用程序的 arrayList 中,可以跨视图共享。数据首先被实例化存储到一个对象中,然后它将是一个arrayList。我想跨视图访问,(也许是sharedPref?)但我还需要确保应用程序是否崩溃,其余数据不会被删除。
有什么建议么?
java - 封装 SQL 平台之间差异的策略?
我正在这里加速一些缓慢的操作,一个案例是表中的父子关系树。目前系统运行在 SQLServer 上,经过一番研究,我发现使用通用表表达式可以将多个查询压缩为一个。
到目前为止一切都很好,但是语法是特定于 SQLServer 的,并且使用(例如)Oracle 做同样的事情需要完全不同的语法。
可以做些什么来构建系统以允许将来适应其他 RDBMS?我主要担心的是:
- SQL 语句散布在代码中,一个 RDBMS 中的一条语句可能需要在另一个 RDBMS 中使用多个语句,因此甚至程序逻辑也可能需要更改。
- 即使可以很好地封装在一个 RDBMS 中的东西(我正在使用存储函数来隐藏 DB 中的一些复杂性)在不同的 DB 中也有细微的差异,或者根本不可用。
到目前为止,我觉得超出最简单 SQL 语句的所有内容似乎总是需要特定于供应商的扩展,因此不可能将差异整齐地隐藏在几个类/存储的 SQL 中(当然可以使用具有大部分抽象已经内置了。但这也排除了数据库的许多更有用的特性)。
有哪些策略可以至少缓解供应商差异带来的痛苦?我知道这是一个非常广泛的问题,没有万能的答案。但我希望有一些指针和模式来减少数据库对应用程序的影响。
编辑:实现语言是 Java,简单地使用 ORM(例如 Hibernate)不是我想要的(或多或少需要重写约 50% 的代码库)。
EDIT2:我主要寻找以尽可能普遍兼容的方式将细节推送到数据库中的可能性,理想情况下我希望java部分使用的SQL对于所有平台都是相同的(或者只需要非常由于语法差异而略有变化)。对于我给出的 CTE 示例,我目前将其推送到存储函数中,希望在需要移植时,该功能也可以在函数中重现。
EDIT3:目前我没有迫切需要支持其他 RDBM。如果它只适用于 SQLServer,没有人会责怪我。但在可能的情况下,我希望避免将 java 代码与特定的数据库供应商联系起来。
EDIT4:一些背景 - 当前的工作是向系统添加功能 - 它不是设计或计划的功能。业务人员的要求一点点滴滴出现,很难提前计划。虽然每个需求本身并不是很难解决,但恐怕我们会积累一大堆标记的东西,如果不详细了解每个查询,这些东西是不可能移植的。由于 SQLServer 本身在每个主要的新版本中也引入了各种与自身不兼容的问题,我担心即使切换到更新的 SQLServer 也可能成为未来的主要障碍(我们过去从 2005 年到 2008 年进行过一次这样的升级 - 那一次去了对于我正在维护的东西来说很顺利,但它已经给我们的供应商之一造成了许多问题)。
php - 防止用户编写的 include() 崩溃
考虑以下代码:
我无法确保文件 malformedFile.php 是有效的 PHP 代码,不会崩溃或不会调用 die()。即使 malformedFile.php 死亡或崩溃,我怎样才能继续捕获?我的兴趣是使应用程序尽可能健壮,同时仍然允许用户通过包含实现自己的插件。
谢谢。
android - 应用程序崩溃时的良好做法
我的应用程序目前没有崩溃,但我们正在努力让它变得非常健壮,我们正在做的一件事是跟踪“某些事件”的时间,直到它被用户手动停止。
我的预期实施
这就是我计划实施的方式。我打算这样做,所以当他们提交初始“事件”时,它开始计时并在我们的 SQLite 数据库中启动初始时间和事件的其余部分。然后在同一个提交屏幕上会出现一个按钮,用于停止对事件进行计时。我们希望对事件进行准确的时间跟踪。我会在首选项中设置一个标志,表示有一个正在进行的事件和另一个具有其唯一 ID 的首选项。
忧虑
所以我担心的是:如果应用程序崩溃或发生了不好的事情,我想给这个人一个选项来更改事件的结束时间。我打算通过以下两种方式之一执行此操作: 1. 检查应用程序何时再次启动(如果有办法这样做),询问标志是否仍然设置,以及应用程序是否刚刚启动。然后给他们这个选项来编辑。2.如果存在,调用onTerminate方法或android在关闭时使用的东西,即使它崩溃了。再说一次,我不知道这是否存在。
有什么建议么?
php - 如果测试中断,我如何禁用 Web 应用程序中的功能?
我必须为课堂写一个刮板,我想对其进行测试以确保它确实有效。
如果我正在抓取的网站对其网站进行了更改,我希望我们的网站失败并禁用该功能,直到我们更新抓取工具。
假设我使用单元测试来测试刮板,是否有一些工具会每 X 分钟运行一次测试,并在禁用 Y 功能之前查看它是否损坏?
我想我要问的是,我可以利用哪些工具来使我的应用程序更健壮,以便我的用户在我的刮板损坏时不会看到一些奇怪的消息?