小编Luc*_*iva的帖子

JavaScript对象的长度

如果我有一个JavaScript对象,请说

const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
Run Code Online (Sandbox Code Playgroud)

是否有内置或接受的最佳实践方法来获取此对象的长度?

javascript javascript-objects

2224
推荐指数
30
解决办法
169万
查看次数

使用socket.io和node.js将消息发送到特定客户端

我正在使用socket.io和node.js,直到现在看起来还不错,但我不知道如何从服务器向特定客户端发送消息,如下所示:

client.send(message, receiverSessionId)
Run Code Online (Sandbox Code Playgroud)

但是这些.send().broadcast()方法似乎都不能满足我的需要.

我发现作为一种可能的解决方案是,该.broadcast()方法接受一个不发送消息的SessionIds数组作为第二个参数,因此我可以将当​​前连接的所有SessionId的数组传递给服务器,除了一个我希望发送消息,但我觉得必须有更好的解决方案.

有任何想法吗?

javascript server-side websocket node.js socket.io

179
推荐指数
10
解决办法
21万
查看次数

如何强制阻止Node.js进程终止?

TL; DR

强制保持Node.js进程运行的最佳方法是什么,即保持其事件循环不运行,从而阻止进程终止?我能想出的最佳解决方案是:

const SOME_HUGE_INTERVAL = 1 << 30;
setInterval(() => {}, SOME_HUGE_INTERVAL);
Run Code Online (Sandbox Code Playgroud)

如果您将间隔时间保持足够长的话,这将保持间隔运行而不会引起太多干扰.

有没有更好的方法呢?

长版的问题

我有一个Node.js脚本使用Edge.js注册一个回调函数,以便可以从.NET内的DLL内部调用它.此功能将每秒调用1次,发送一个应打印到控制台的简单序列号.

Edge.js部分很好,一切正常.我唯一的问题是我的Node.js进程执行它的脚本,然后它用完了要处理的事件.它的事件循环为空,它只是终止,忽略了它应该继续运行以便能够从DLL接收回调的事实.

我的Node.js脚本:

var
    edge = require('edge');

var foo = edge.func({
    assemblyFile: 'cs.dll',
    typeName: 'cs.MyClass',
    methodName: 'Foo'
});

// The callback function that will be called from C# code:
function callback(sequence) {
    console.info('Sequence:', sequence);
}

// Register for a callback:
foo({ callback: callback }, true);

// My hack to keep the process alive:
setInterval(function() {}, 60000);
Run Code Online (Sandbox Code Playgroud)

我的C#代码(DLL):

public class MyClass
{
    Func<object, …
Run Code Online (Sandbox Code Playgroud)

node.js edge.js

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

UDP在Node.js中发送性能

我正在对Java UDP客户端进行基准测试,该客户端以尽可能快的速度连续发送具有100字节有效负载的数据报.它是使用实现的java.nio.*.测试表明,它能够实现每秒220k数据报的稳定吞吐量.我没有测试服务器; 客户端只是将数据报发送到localhost上的一些未使用的端口.

我决定在Node.js中运行相同的测试来比较这两种技术,看到Node.js的执行速度比Java快10倍,我感到非常难过.让我带您浏览我的代码.

首先,我使用Node.js的dgram模块创建一个UDP套接字:

var client = require('dgram').createSocket("udp4");
Run Code Online (Sandbox Code Playgroud)

然后我创建一个使用该套接字发送数据报的函数:

function sendOne() {
    client.send(message, 0, message.length, SERVER_PORT, SERVER_ADDRESS, onSend);
}
Run Code Online (Sandbox Code Playgroud)

该变量message是在应用程序启动时从包含一百个字符的字符串创建的缓冲区:

var message = new Buffer(/* string with 100 chars */);
Run Code Online (Sandbox Code Playgroud)

该函数onSend只增加一个变量,该变量保存到目前为止发送了多少数据报.接下来我有不断调用一个函数sendOne()使用setImmediate():

function sendForever() {
    sendOne();
    setImmediate(sendForever);
} 
Run Code Online (Sandbox Code Playgroud)

最初我试图使用,process.nextTick(sendForever)但我发现它总是把自己放在事件队列的顶端,甚至在IO事件之前,正如文档所说:

它在事件循环的后续滴答中触发任何其他I/O事件(包括定时器)之前运行.

这可以防止发送 IO事件发生,就像每次打勾时nextTick一直放在sendForever队列的尖端一样.队列随着未读IO事件而增长,直到它使Node.js崩溃:

fish: Job 1, 'node client' terminated by signal SIGSEGV (Address boundary …
Run Code Online (Sandbox Code Playgroud)

benchmarking udp node.js

24
推荐指数
1
解决办法
1747
查看次数

在Node.js中单调增加时间

这个问题已经回答为Javascript 这里,但window.performance.now()显然是不提供Node.js的

某些应用需要一个稳定的时钟,即一个随时间单调增加的时钟,不受系统时钟漂移的影响.例如,Java有System.nanoTime()和C++有std::chrono::steady_clock.Node.js中有这样的时钟吗?

javascript node.js system-clock

8
推荐指数
1
解决办法
959
查看次数

MongoDB并发瓶颈

太长; 没看过

问题是关于我在MongoDB上遇到的并发瓶颈.如果我进行一次查询,则需要1个单位的时间才能返回; 如果我进行2个并发查询,则需要2个单位的时间才能返回; 通常,如果我进行n个并发查询,则所有这些查询都需要n个单位才能返回.我的问题是在面对并发查询时可以采取哪些措施来改善Mongo的响应时间.

安装程序

我在AWS上有一个运行MongoDB 2.6.7服务器的m3.medium实例.m3.medium有1个vCPU(Xeon E5-2670 v2的1个核心),3.75GB和4GB SSD.

我有一个名为的单个集合的数据库user_products.此集合中的文档具有以下结构:

{ user: <int>, product: <int> }
Run Code Online (Sandbox Code Playgroud)

有1000个用户和1000个产品,每个用户 - 产品对都有一个文档,总计一百万个文档.

该集合有一个索引{ user: 1, product: 1 },我的结果都是indexOnly.

考试

测试是在运行MongoDB的同一台机器上执行的.我正在使用benchRunMongo提供的功能.在测试期间,没有对MongoDB进行其他访问,并且测试仅包含读取操作.

对于每个测试,模拟了许多并发客户端,每个客户端都会尽可能多地进行一次查询,直到测试结束.每次测试运行10秒.并发性以2的幂来测试,从1到128个并发客户端.

运行测试的命令:

mongo bench.js
Run Code Online (Sandbox Code Playgroud)

这是完整的脚本(bench.js):

var
    seconds = 10,
    limit = 1000,
    USER_COUNT = 1000,
    concurrency,
    savedTime,
    res,
    timediff,
    ops,
    results,
    docsPerSecond,
    latencyRatio,
    currentLatency,
    previousLatency;

ops = [
    {
        op : "find" ,
        ns : "test_user_products.user_products" ,
        query : {
            user : { …
Run Code Online (Sandbox Code Playgroud)

concurrency mongodb

7
推荐指数
1
解决办法
1166
查看次数

无法将ValueProviderFactory添加到Web API

我正在使用MVC 4,我有这个简单的虚拟ValueProvider:

class DummyValueProviderFactory : ValueProviderFactory
{
    public override IValueProvider GetValueProvider(ControllerContext controllerContext)
    {
        return new DummyValueProvider();
    }

    private class DummyValueProvider : IValueProvider
    {
        public DummyValueProvider()
        {
        }

        public bool ContainsPrefix(string prefix)
        {
            return true;
        }

        public ValueProviderResult GetValue(string key)
        {
            return null;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试在Web API中注册它的工厂时,我的问题就出现了:

config.Services.Add(typeof(ValueProviderFactory), new DummyValueProviderFactory());
Run Code Online (Sandbox Code Playgroud)

它编译好,但是当服务器启动时,我得到一个ArgumentException告诉我The service type ValueProviderFactory is not supported.

我已经阅读了本教程另外一篇,并且两者都告诉我它应该可以正常工作.我究竟做错了什么?

asp.net asp.net-mvc-4 asp.net-web-api

5
推荐指数
1
解决办法
1021
查看次数

Javascript数字分隔符?

某些语言,如 Java 和 C++,允许您使用数字分隔符。为了提高可读性,您可以对千分之位数进行分组:

1_000_000_000
Run Code Online (Sandbox Code Playgroud)

但不仅是每千人;你真的可以在任何地方使用它。假设你有一些以厘米为单位的价值。像这样将它分开,可以让人类更容易将其作为米来阅读:

10_00  // 10 meters
Run Code Online (Sandbox Code Playgroud)

如果我们也可以在 Javascript 中使用它,那不是很好吗?

javascript

5
推荐指数
1
解决办法
2699
查看次数

C 中数字的凯撒密码

我想为数字制作凯撒密码。(所有数字加3)

输入:52 输出:85

输入:954 输出:287

输入:-10457 输出:-43780

如果有人帮助我,我会很高兴。

我试过了,但是当我输入小于 5 位的数字时,它输出 3 到开头。

当我输入 52 时,它输出 33385。我还想询问用户程序是否应该接受新数字或直接退出。

#include <stdio.h>
#include <stdlib.h>

int main()
{

    int number, operation;

    printf("Enter the number: ");
    scanf("%d", &number);

    printf("%d", ((number / 10000) + 3) % 10);
    printf("%d", (((number % 10000) / 1000) + 3) % 10);
    printf("%d", (((number % 1000) / 100) + 3) % 10);
    printf("%d", (((number % 100) / 10) + 3) % 10);
    printf("%d\n", ((number % 10) + 3) % …
Run Code Online (Sandbox Code Playgroud)

c

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

ValueProvider 永远不会被调用

我正在使用MVC 4 Web API并且我有这个虚拟的 ValueProvider:

DummyValueProvider.cs

class DummyValueProvider : IValueProvider
{
    public DummyValueProvider()
    {
    }

    public bool ContainsPrefix(string prefix)
    {
        return true;
    }

    public ValueProviderResult GetValue(string key)
    {
        return new ValueProviderResult("testing", "testing", System.Globalization.CultureInfo.InvariantCulture);
    }
}

class DummyValueProviderFactory : System.Web.Http.ValueProviders.ValueProviderFactory
{
    public override IValueProvider GetValueProvider(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        return new DummyValueProvider();
    }
}
Run Code Online (Sandbox Code Playgroud)

这个 ValueProvider 应该true为任何询问的键返回,所以它总是在需要时为模型绑定器提供一个值。ValueProvider 在 WebApiConfig 中注册,如下所示:

WebApiConfig.cs

config.Services.Add(typeof(ValueProviderFactory), new DummyValueProviderFactory());
Run Code Online (Sandbox Code Playgroud)

代码编译并运行良好。我在 Account API 控制器中也有这个操作:

账户控制器.cs

public HttpResponseMessage Register(string foo) { ... }
Run Code Online (Sandbox Code Playgroud)

当我像下面这样调用它时,这个动作被调用得很好:

/register?foo=bar
Run Code Online (Sandbox Code Playgroud)

并 …

asp.net asp.net-mvc-4 asp.net-web-api

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

怎么把BigInt转换成数字?

我发现自己想将一个BigInt值转换为一个Number值。知道我的值是一个安全的整数,如何转换它?

javascript bigint ecmascript-next

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