热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使服务器和应用程序分开-Howtokeepserverandapplicationseparate

IhaveanodejsApplicationrunningonserverwithnode-mysqlandexpress,AtfirstIfacedproblem

I have a nodejs Application running on server with node-mysql and express, At first I faced problem where some exceptions were not handled and the application would go down with network connectivity issues.

我有一个nodejs应用程序在运行带有node-mysql和express的服务器上运行,起初我遇到了一些问题,其中一些异常没有得到处理,应用程序会因网络连接问题而崩溃。

I handled all uncaught exceptions and the sever wouldn't go down this time but instead it would hang. I figured it was because I returned response only if query didn't raise any exception, so I handled all query related exceptions too.

我处理了所有未被捕获的异常,而且这次服务器不会停机,而是会挂起。我认为这是因为我只在查询没有引发任何异常时返回响应,所以我也处理了所有与查询相关的异常。

Next if MySQL server terminate connection for some reason my application wouldn't reconnect, i tried reconnecting but it would give an error related to "enqueue connection handshake or something". From another stack question I was supposed to use connection pool so if server terminates connection it will regain connectivity some how, which I did.

接下来,如果MySQL服务器由于某种原因终止连接我的应用程序将不会重新连接,我尝试重新连接但它会给出与“排队连接握手或某事”相关的错误。从另一个堆栈问题我应该使用连接池,所以如果服务器终止连接它将重新连接一些如何,我做了。

My here question is that each time I faced an issue I had to shut down whole application and thanks to nodejs where server is configured programmatically goes down too. Can I or better yet how can I decouple my Server and Application almost completely so that if I make some change in my application I wouldn't have to re-deploy?

我在这里的问题是每次遇到问题时我都必须关闭整个应用程序,并且感谢nodejs,其中以编程方式配置服务器也是如此。我可以或者更好的是如何几乎完全解耦我的服务器和应用程序,以便如果我在我的应用程序中进行一些更改,我将不必重新部署?

Specially for case that right now everything is okay and my application is constantly giving me connection pool error on server and in development version its working fine, so even if I restart my application I am not sure how will I face this problem again so I can properly diagnose this.

特别是对于现在一切都很好的情况我的应用程序不断给我连接池错误在服务器和开发版本它工作正常,所以即使我重新启动我的应用程序我不知道我将如何再次面对这个问题所以我可以正确诊断这一点。

Let me know if anyone needs more info regarding my question.

如果有人需要有关我的问题的更多信息,请告诉我。

1 个解决方案

#1


1  

Are you using a front-end framework to serve your application, or are you serving it all from server calls?

您是使用前端框架来为您的应用程序提供服务,还是通过服务器调用提供服务?

So fundamentally, if your server barfs for any reason (i.e. 500 error), you WANT to shut down and restart, because once your server is in that state, all of your in-transit data and your stack is in an unknown state. There's no way to correctly recover from that, so you are safer from both a server and an end-user point of view to shutdown the process and restart.

所以从根本上说,如果您的服务器由于任何原因(即500错误)barfs,您想要关闭并重新启动,因为一旦您的服务器处于该状态,您的所有传输中数据和您的堆栈都处于未知状态。无法从中正确恢复,因此从服务器和最终用户的角度来看,您可以更安全地关闭进程并重新启动。

You can minimise the impact of this by using something like Node's Cluster module, which allows you to fork child processes of your server and generate multiple instances of the same server, connected to the same database, allowing access on the same port etc, therefore, if your user (or your server), manages to hit an unhandled exception, it can kill the process and restart without shutting down your entire server.

您可以通过使用Node的Cluster模块来最小化这种影响,它允许您分叉服务器的子进程并生成同一服务器的多个实例,连接到同一个数据库,允许访问同一个端口等,因此,如果您的用户(或您的服务器)设法遇到未处理的异常,它可以终止进程并重新启动而无需关闭整个服务器。

Edit: Here's a snippet:

编辑:这是一个片段:

var cluster = require('cluster');
var threads = require('os').cpus().length;


if(cluster.isMaster) {
    for(var i = 0; i 

That being said, there's no way for you to run up your application and server separately if Node is serving your client content. Once you terminate your server, your Endpoints are down. If you really wanted to be able to keep a client-side application active and reboot your server, you'd have to entirely separate the logic, i.e. have your Application in a different project to your server, and use your server as API endpoints only.

话虽这么说,如果Node正在为您的客户端内容提供服务,则无法单独运行您的应用程序和服务器。终止服务器后,您的终端将关闭。如果您真的希望能够保持客户端应用程序处于活动状态并重新启动服务器,则必须完全分离逻辑,即将应用程序放在与服务器不同的项目中,并仅将服务器用作API端点。

As for Connection Pools in Node-mysql: I have never used that module so I couldn't say what best practice is there.

至于Node-mysql中的连接池:我从未使用过该模块,因此我无法说出最佳实践。


推荐阅读
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 深入理解排序算法:集合 1(编程语言中的高效排序工具) ... [详细]
  • 深入理解 Java 控制结构的全面指南 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • Python内置模块详解:正则表达式re模块的应用与解析
    正则表达式是一种强大的文本处理工具,通过特定的字符序列来定义搜索模式。本文详细介绍了Python内置的`re`模块,探讨了其在字符串匹配、验证和提取中的应用。例如,可以通过正则表达式验证电子邮件地址、电话号码、QQ号、密码、URL和IP地址等。此外,文章还深入解析了`re`模块的各种函数和方法,提供了丰富的示例代码,帮助读者更好地理解和使用这一工具。 ... [详细]
  • Java环境中Selenium Chrome驱动在大规模Web应用扩展时的性能限制分析 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • Spring框架中的面向切面编程(AOP)技术详解
    面向切面编程(AOP)是Spring框架中的关键技术之一,它通过将横切关注点从业务逻辑中分离出来,实现了代码的模块化和重用。AOP的核心思想是将程序运行过程中需要多次处理的功能(如日志记录、事务管理等)封装成独立的模块,即切面,并在特定的连接点(如方法调用)动态地应用这些切面。这种方式不仅提高了代码的可维护性和可读性,还简化了业务逻辑的实现。Spring AOP利用代理机制,在不修改原有代码的基础上,实现了对目标对象的增强。 ... [详细]
  • 如何利用正则表达式(regexp)实现高效的模式匹配?本文探讨了正则表达式在编程中的应用,并分析了一个示例程序中存在的问题。通过具体的代码示例,指出该程序在定义和使用正则表达式时的不当之处,旨在帮助读者更好地理解和应用正则表达式技术。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有