小编Ali*_*ash的帖子

node.js不会在disconnect事件上发送socket

当有人连接到节点服务器时,我保留一个包含所有套接字的数组.这样我就可以在需要时向所有人广播消息,或者循环通过用户来计算在线用户的数量等.

所有这一切都很好,但是当一个on disconnect事件被触发时,我的参数中没有收到套接字.还有另一种方法可以知道哪个套接字刚断开连接?

var allClients = [];

io.sockets.on('connection', function(socket) {
   allClients.push(socket);

   socket.on('disconnect', function(socket) {
      console.log('Got disconnect!');

      var i = allClients.indexOf(socket);
      delete allClients[i];
   });
});
Run Code Online (Sandbox Code Playgroud)

当然上面的例子不起作用,因为disconnect事件不会给出socket参数(或任何其他参数).那么还有另一个事件在断开连接之前触发了套接字仍在那里吗?

阿里

disconnect node.js socket.io

10
推荐指数
1
解决办法
2万
查看次数

RabbitMQ PHP(pecl php-amqp)读取时间超过1.5秒(在小基准测试期间)

我们有一个运行RabbitMQ的测试,但不知何故达到一个"阈值",这使RabbitMQ变慢.

我们做了什么,我们设置了一个RabbitMQ服务器并制作了一个小的PHP脚本,它使用pecl-amqp连接(没有pconnect)到MQ服务器,发送1个随机消息并在此之后立即断开连接.我们将此过程分叉200次(单个php执行,因此没有线程),这意味着每秒+/- 2000个连接都会打开到MQ服务器并关闭.

之后,我在另一台服务器上启动相同的脚本来测量连接时间+读取时间.我们注意到客户端收到"Connection.Start"消息需要+/- 1.5秒.我为这个单个客户端添加了tcpdump的屏幕截图,向您展示了这种情况.我们看到的另一个问题是,有很多TCP无序和重传.

服务器规格

  • 裸金属
  • CPU:2x英特尔(R)Xeon(R)CPU E5-2420 0 @ 1.90GHz
  • 内存:24GB

TCPdump http://i.imgur.com/rF1GsOy.png

sysctl设置:

fs.file-max = 11479756
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_time = 7200
net.ipv4.conf.default.rp_filter = 0
net.ipv4.tcp_syncookies=1

net.core.somaxconn=2048
net.ipv4.ip_local_port_range = 10240    65535
net.nf_conntrack_max = 1000000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
Run Code Online (Sandbox Code Playgroud)

rabbitmq.conf

%% -*- mode: erlang -*-
[{
        rabbit,
        [{
                tcp_listeners, [{
                    "10.0.1.69", 5672
                }, {
                    "::1", 5672
                }]
            },
                {tcp_listen_options, [binary,
                {packet, …
Run Code Online (Sandbox Code Playgroud)

php rabbitmq php-amqp

6
推荐指数
0
解决办法
446
查看次数

Nginx映射不使用我的正则表达式的参数

我正在尝试使用nginx的地图,但结果并不是我所期望的.

这就是我所拥有的:

map $uri $new {
  default                                 "";
  ~*/cc/(?P<suffix>.*)$                   test.php?suffix=$suffix;
}

location ~     [a-zA-Z0-9/_]+$ {
        proxy_pass http://www.domain.com:81/$new;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Run Code Online (Sandbox Code Playgroud)

当我访问www.domain.com/cc/abc时,我会在日志中看到这一点

2012/03/29 17:27:53 [warn] 3382#0: *33 an upstream response is buffered to a temporary file /var/cache/nginx/proxy_temp/5/00/0000000005 while reading upstream, client: 1.2.3.4, server: www.domain.com, request: "GET /cc/abc HTTP/1.1", upstream: "http://1270.0.0.1:81/test.php?suffix=$suffix", host: "www.domain.com"
Run Code Online (Sandbox Code Playgroud)

$ suffix不会被替换.

但是当我这样做时:

map $uri $new {
  default                                 "";
  ~*/cc/(?P<suffix>.*)$                   $suffix;
}

location ~     [a-zA-Z0-9/_]+$ {
        proxy_pass http://www.domain.com:81/$new;
        proxy_set_header …
Run Code Online (Sandbox Code Playgroud)

nginx

3
推荐指数
1
解决办法
5267
查看次数

标签 统计

disconnect ×1

nginx ×1

node.js ×1

php ×1

php-amqp ×1

rabbitmq ×1

socket.io ×1