我需要做一个服务器应用程序,监听几个TCP连接。这个应用程序必须是轻量级的和TCP连接将来自GPS设备(不是从浏览器,所以我不能使用WebSockets例如)。
为了确保这可以适当地扩展到数千台设备,我需要充分利用所有机器的CPU。根据我的研究,我发现了两种做这件事的方法:
net
服务器并使用本地cluster
API node.js提供的根据我的理解,这些选项是相互排斥的。如果我选择选项1,我就不能使用PM2,反之亦然。
我的团队在任何地方都使用PM2,所以为了一致性起见,我也想使用PM2。这里的问题是PM2在Node.js套接字应用程序中存在问题。例如,我知道要使用socket.io
,我们需要安装额外的模块(sticky-session
),但是由于我使用的是本机API,因此没有关于我需要进行哪些调整的信息。
使用本机net
API,我不知道PM2是否会在CPU之间均匀地分配连接,也找不到任何信息,如果到时候数据会流向正确的工作人员。
为了演示我的目标,我使用cluster
本机Node.js API制作了一个小应用程序:
const cluster = require("cluster");
const net = require("net");
const numCPUs = require("os").cpus().length;
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on("exit", (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
// Workers can share any TCP connection
const server = net.createServer( connection => {
console.log(`Client connected to ${process.pid}`);
connection.on( "end", () => console.log( `Client disconnected from ${process.pid}` ) );
connection.on( "data", data =>console.log(`${process.pid} received ${data.toString("ascii")}`) );
connection.on( "close", () => console.log(`Client closed connection with ${process.pid}`) );
} );
server.listen( 8124, () => console.log(`Worker ${process.pid} Bound`) );
console.log(`Worker ${process.pid} started`);
}
根据我对文档的理解,这个服务器平衡所有CPU的负载,并重定向连接。
您可以使用telnet尝试此示例:telnet localhost8124
所以,这里的答案很棘手...
因此,PM2集群模式实际上使用Node.js本机API。这意味着从节点使用net
和cluster
本机API几乎只是复制PM2已经完成的工作,除非您希望以完全不同的方式完成。
如果您的应用程序是无状态的,PM2将使用cluster
功能(我将其称为使用PM2的“fork”应用程序)进行正确的伸缩。
如果不是,PM2就不能保证什么。
http://pm2.keymetrics.io/docs/usage/cluster-mode/#statelessify-your-application
但是在我使用运行应用程序的服务器上,环境变量仍然。 我用来在服务器上运行应用程序的pm2命令是:
我搜索了一下,我觉得这是可能的。但当我这样尝试的时候: JMockit能与Scala一起工作吗?如果可以的话,我做错了什么?
根据它的Javadoc,将生成,其中的第一个值是subscribe和第一个next信号之间的经过时间。 以下测试不起作用 它将抛出异常: 我原以为经过的时间至少是1000ms,但结果只有11ms。
pom.xml版本信息: SpringFox-Swagger2:2.5.0 昂首阔步-核心:1.5.10 springfox-swagger-ui:2.6.1 Springboot:1.5.3 我有一个项目与swagger2和Springboot。 没有@Aspect的项目代码工作得很好。 正确的结果: 但是当我添加以下代码时,swagger-ui没有显示test-api-impl。 swagge
Selenium版本:2.41.0(作为Nuget包安装)OS:Windows7浏览器:Firefox浏览器版本:32
为了我的研究,我在firefox中做了一些源代码修改并自己构建。为了自动化测试,我选择使用Selenium,但不幸的是,我新构建的Firefox似乎不支持Selenium。 我做了以下工作: Firefox确实会打开并且响应迅速(我可以在搜索栏中输入一个网站)。但过了一段时间,python脚本崩溃,出现以下错误消息: 我在谷歌搜索了那个错误消息,并且大多数解决方案都建议我应该更新Selenium,