小编Nar*_*put的帖子

在forEach循环中调用socket.disconnect实际上并不会在所有套接字上调用disconnect

我是javascript世界的新手.最近我正在使用nodejs中的聊天应用程序.所以我有一个名为gracefulshutdown的方法,如下所示.

var gracefulShutdown = function() {
    logger.info("Received kill signal, shutting down gracefully.");
    server.close();
    logger.info('Disconnecting all the socket.io clients');
    if (Object.keys(io.sockets.sockets).length == 0) process.exit();
    var _map = io.sockets.sockets,
        _socket;
    for (var _k in _map) {
        if (_map.hasOwnProperty(_k)) {
            _socket = _map[_k];
            _socket.disconnect(true);
        }
    }
    ...code here...
    setTimeout(function() {
        logger.error("Could not close connections in time, shutting down");
        process.exit();
    }, 10 * 1000);
}
Run Code Online (Sandbox Code Playgroud)

以下是断开连接侦听器中发生的情况.removeDisconnectedClient方法只是更新数据库中的条目以指示已删除的客户端.

socket.on('disconnect',function(){removeDisconnectedClient(socket);});

因此,在这种情况下,并未针对所有套接字触发disconnect事件.它是从阵列中随机抽出的几个套接字.虽然我能够在队友的帮助下使用setTimeout(fn,0)修复它.

我在网上阅读了它,并且只了解setTimeout通过将代码添加到事件队列末尾来延迟代码的执行.我读了关于javascript上下文,调用堆栈,事件循环.但是我不能把这一切都放在一起.我真的不明白为什么以及如何发生这个问题.有人可以详细解释一下.什么是解决或避免它们的最佳方法.

javascript sockets node.js

18
推荐指数
1
解决办法
617
查看次数

耙子流产!安装Octopress的问题

我试图在我的窗户上安装Octopress.根据他们的网站上的教程.但是当我输入命令时

rake install 
Run Code Online (Sandbox Code Playgroud)

它给了我以下错误

C:\Documents and Settings\admin\octopress>rake install
rake aborted!
You have already activated rake 0.9.2.2, but your Gemfile requires rake 0.9.2. U
sing bundle exec may solve this.

(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)

并且因为错误说我需要安装rake 0.9.2我尝试使用以下命令.

C:\Documents and Settings\admin\octopress>gem install rack -v=0.9.2.0
ERROR:  Could not find a valid gem 'rack' (= 0.9.2.0) in any repository
ERROR:  Possible alternatives: rack
Run Code Online (Sandbox Code Playgroud)

我已经在我的电脑上安装了Ruby&Gems.但我无法弄清楚如何解决这个问题.我如何使用"捆绑exec"来安装Octopress?

ruby rake gem bundle

6
推荐指数
1
解决办法
1913
查看次数

即使文件存在,start-stop-daemon也不会写入nginx.pid文件

这似乎是一个重复的问题,但事实并非如此.我在其上发现了一些start-stop-daemon没有创建PID文件的文章.但就我而言,我已经创建了PID文件.我在服务器上执行此命令以启动Nginx:

/mnt/nginx/logs/nginx.pid
start-stop-daemon --start --quiet --pidfile /mnt/nginx/logs/nginx.pid --exec /usr/local/sbin/nginx
Run Code Online (Sandbox Code Playgroud)

PID文件已存在但仍未start-stop-daemon写入文件.我甚至尝试使用该--make-pidfile选项,但随后start-stop-daemon写入错误的pid到文件.

nginx start-stop-daemon

6
推荐指数
1
解决办法
4586
查看次数

使用ruby调整动画GIF图像的大小?

我正在尝试将GIF图像调整为不同大小.我在ruby中使用RMagick库.但是对于一些gif图像来说,即使我缩小GIF,文件大小也会增加.我正在以相同的宽高比调整图像图像的大小.这是我的代码.

require 'rmagick'
path = "/path/to/file/"
s_image = "image.gif" # image is 320*320
t_image = "t.gif"
file_name = path+s_image
file = File.new(file_name)
list = Magick::ImageList.new.from_blob file.read
list = list.coalesce.remap
list.each do |x|
  x.resize_to_fill!(256,256)
end
File.open("#{path+t_image}", 'wb') { |f| f.write list.to_blob }
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

ruby rmagick image-processing

4
推荐指数
1
解决办法
1508
查看次数

Facebook Graph API返回的隐蔽时间为可读时间格式

我在JSON对象中以此格式获取时间数据.

 "created_time": "2012-04-01T15:02:52+0000"
Run Code Online (Sandbox Code Playgroud)

我需要将这种格式转换为一些可读的时间格式

 3:02 PST 1 April, 2012 
Run Code Online (Sandbox Code Playgroud)

所以用户理解它.我使用Jquery来处理这些数据.我试过这样做,但我不明白它是哪种时间格式!

javascript time jquery date

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

从大文件中删除4字节UTF字符

我有一个包含多字节字符的文件.由于文件非常大,我想从这个文件中删除4字节的utf字符.我需要一个更快的解决方案来实现它.我为此任务尝试了以下java代码,但它为Java堆空间提供了内存不足异常.所以

import java.util.*;
import java.io.*;
public class A{
 public static void main(String args[]) throws Exception{
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  String str=br.readLine();
  char[] c_array;
  String c_string;
  byte[] c_byte_array;
  c_array = str.toCharArray();
  for (char c : c_array){
   c_string = Character.toString(c);
   c_byte_array = c_string.getBytes("UTF-8");
   if (c_byte_array.length <= 3){
    System.out.print(c_string);
   }
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法改善这个或其他更快更好的方法来做到这一点.我也试过这个grep命令

grep -o -P "[\x10000-\x10ffff]" myfile
Run Code Online (Sandbox Code Playgroud)

但它退出时出错

grep: range out of order in character class
Run Code Online (Sandbox Code Playgroud)

所以我的问题是上面的正则表达式有什么问题.或者换句话说什么是匹配4字节utf字符的正则表达式.另一个问题是上述哪种方法可以更有效地删除4字节字符

java bash multibyte

0
推荐指数
1
解决办法
1800
查看次数

将十进制数转换为float并截断它

我有一个号码

例如:

8183
Run Code Online (Sandbox Code Playgroud)

我需要的是将它转换为浮点数 -

例如8183

(8183).toFixed(2);
Run Code Online (Sandbox Code Playgroud)

会回来的

8183.00
Run Code Online (Sandbox Code Playgroud)

但我需要进一步截断它,所以最终的数字将是

8.18
Run Code Online (Sandbox Code Playgroud)

所以基本上我需要使用只有2位小数的浮点数.我尝试使用Math.floor和ceil,但无法弄明白!

javascript floating-point decimal

-1
推荐指数
1
解决办法
2412
查看次数