- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 websocket/ws众所周知,这是使用 NodeJS 的网络套接字最快的可用实现之一。然而,在 Node 决定它完全完成大部分工作之前,我只能达到大约 1,000 个连接。一旦达到大约 900 个连接,它就会变得缓慢,然后停止。
这是我的实现(基本回显服务器):
var wss = require('ws').Server;
var ws = require('ws');
var server = new wss({port:8080});
var connections = 0;
server.on('connection', function connection(socket) {
connections++;
socket.on('message', function incoming(data) {
socket.send(data);
});
socket.on('close', function ack() {
connections--;
});
});
setInterval(function() {
printConnections();
}, 5000);
function printConnections() {
console.log("Connected clients: " + connections);
}
服务器显示的连接数总是等于客户端列出的连接数,所以这不是问题。我试过在不同的网络上使用多台计算机来突破 1,000 个用户的限制(看看它是否是家庭网络带宽限制),但事实并非如此。此时 SSH 也变得非常无响应。
服务器规范:
- 1Gbit ethernet.
- Three full, dedicated HT CPU cores (Nehalem or better)
- 3072 MB of RAM
- Ubuntu Server 14.04 LTS
当服务器运行时(1,000 个用户),仍有大量内存可用。试图弄清楚这里的问题是什么,因为我们正在为移动应用程序开发服务器,而 1,000 个并发用户只是触及表面。我们的目标是大约 100,000 个并发用户。当我们上线时,我们肯定会改进硬件(并获得一台专用机器),但我们应该能够从我们当前的设置中获得更多。
我还应该补充一点,在尝试解决该问题时已进行以下修改:
ulimit -n 1000000
sysctl -w fs.file-max = 1000000
sysctl -w fs.nr_open = 1000000
sysctl -w net.ipv4.netfilter.ip_conntrack_max = 1048576
sysctl -w net.nf_conntrack_max = 1048576
最佳答案
根据您的描述,以及 ssh 和整个系统也受到影响的事实,您一定在某处遇到了瓶颈。它不是 CPU 也不是带宽,所以你应该看看内存。发送和接收 TCP 缓冲区的默认大小是多少?
另一种可能性,我不知道您正在测试的环境,如果您正在使用任何像 AWS 这样的 IaaS,或者您正在家里在 NAT 设备(可能是 WiFi AP/路由器)后面进行测试,有时当您尝试要打开太多连接,NAT 会关闭您的连接,或者它们会在(30-60 秒)后超时。如果是这种情况,您可以将您的 ssh 客户端配置为每 20 秒发送一次保持事件消息(我会配置这个时间或更少)。这将解决 ssh 的问题。此外,在这种情况下,我不相信您将能够运行这种测试(使用这种配置)。
如果以上都不是,则另一种可能性是您测试创建两个监听不同套接字的进程。如果您可以通过一个端口连接 1K 个客户端和另一个端口连接 1K 个客户端来实现此测试,您可以确定是系统资源问题还是进程资源问题。
希望对您有所帮助。
关于node.js - NodeJS 网络套接字服务器在大约 1,000 个连接时爆炸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33361942/
我知道这个问题可能已经被问过,但我检查了所有这些,我认为我的情况有所不同(请友善)。所以我有两个数据集,第一个是测试数据集,第二个是我保存在数据框中的预测(预测值,这就是没有数据列的原因)。我想合并两
在 .loc 方法的帮助下,我根据同一数据框中另一列中的值来识别 Panda 数据框中某一列中的值。 下面给出了代码片段供您引用: var1 = output_df['Player'].loc[out
当我在 Windows 中使用 WinSCP 通过 Ubuntu 连接到 VMware 时,它提示: The server rejected SFTP connection, but it lis
我正在开发一个使用 xml web 服务的 android 应用程序。在 wi-fi 网络中连接时工作正常,但在 3G 网络中连接时失败(未找到 http 404)。 这不仅仅发生在设备中。为了进行测
我有一个XIB包含我的控件的文件,加载到 Interface Builder(Snow Leopard 上的 Xcode 4.0.2)中。 文件的所有者被设置为 someClassController
我在本地计算机上管理 MySQL 数据库,并通过运行以下程序通过 C 连接到它: #include #include #include int main(int argc, char** arg
我不知道为什么每次有人访问我网站上的页面时,都会打开一个与数据库的新连接。最终我到达了大约 300 并收到错误并且页面不再加载。我认为它应该工作的方式是,我将 maxIdle 设置为 30,这意味着
希望清理 NMEA GPS 中的 .txt 文件。我当前的代码如下。 deletes = ['$GPGGA', '$GPGSA', '$GPGSV', '$PSRF156', ] searchquer
我有一个 URL、一个用户名和一个密码。我想在 C# .Net WinForms 中建立 VPN 连接。 你能告诉我从哪里开始吗?任何第三方 API? 代码示例将受到高度赞赏... 最佳答案 您可以像
有没有更好的方法将字符串 vector 转换为字符 vector ,字符串之间的终止符为零。 因此,如果我有一个包含以下字符串的 vector "test","my","string",那么我想接收一
我正在编写一个库,它不断检查 android 设备的连接,并在设备连接、断开连接或互联网连接变慢时给出回调。 https://github.com/muddassir235/connection_ch
我的操作系统:Centos 7 + CLOUDLINUX 7.7当我尝试从服务器登录Mysql时 [root@server3 ~]# Mysql -u root -h localhost -P 330
我收到错误:Puma 发现此错误:无法打开到本地主机的 TCP 连接:9200(连接被拒绝 - 连接(2)用于“本地主机”端口 9200)(Faraday::ConnectionFailed)在我的
请给我一些解决以下错误的方法。 这是一个聊天应用....代码和错误如下:: conversations_controller.rb def create if Conversation.bet
我想将两个单元格中的数据连接到一个单元格中。我还想只组合那些具有相同 ID 的单元格。 任务 ID 名称 4355.2 参与者 4355.2 领袖 4462.1 在线 4462.1 快速 4597.1
我经常需要连接 TSQL 中的字段... 使用“+”运算符时 TSQL 强制您处理的两个问题是 Data Type Precedence和 NULL 值。 使用数据类型优先级,问题是转换错误。 1)
有没有在 iPad 或 iPhone 应用程序中使用 Facebook 连接。 这个想法是登录这个应用程序,然后能够看到我的哪些 facebook 用户也在使用该应用程序及其功能。 最佳答案 是的。
我在连接或打印字符串时遇到了一个奇怪的问题。我有一个 char * ,可以将其设置为字符串文字的几个值之一。 char *myStrLiteral = NULL; ... if(blah) myS
对于以下数据 - let $x := "Yahooooo !!!! Select one number - " let $y := 1 2 3 4 5 6 7 我想得到
我正在看 UDEMY for perl 的培训视频,但是视频不清晰,看起来有错误。 培训展示了如何使用以下示例连接 2 个字符串: #!usr/bin/perl print $str = "Hi";
我是一名优秀的程序员,十分优秀!