小编And*_*rew的帖子

最大并发Socket.IO连接数

这个问题之前已被问过,但最近没有问过,也没有明确答案.

使用Socket.io,在需要添加另一台服务器之前,是否可以维护最大数量的并发连接?

有没有人知道任何大规模使用websockets(特别是socket.io)的活动生产环境?我真的想知道什么样的设置最适合最大连接?

因为Websockets是建立在TCP之上的,所以我的理解是,除非在连接之间共享端口,否则您将受到64K端口限制的约束.但我也看到过使用Gretty512K连接报告.所以我不知道.

websocket socket.io

102
推荐指数
4
解决办法
8万
查看次数

在Jest中嘲弄全局

在Jest中有没有办法模拟全局对象,比如navigator,Image*?我已经非常放弃了这一点,并将其留给了一系列可模拟的实用方法.例如:

// Utils.js
export isOnline() {
    return navigator.onLine;
}
Run Code Online (Sandbox Code Playgroud)

测试这个微小的功能很简单,但很苛刻,而且根本不具有确定性.我可以获得75%的方式,但这是我可以做的:

// Utils.test.js
it('knows if it is online', () => {
    const { isOnline } = require('path/to/Utils');

    expect(() => isOnline()).not.toThrow();
    expect(typeof isOnline()).toBe('boolean');
});
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我对这个间接是好的,我现在可以navigator通过这些实用程序访问:

// Foo.js
import { isOnline } from './Utils';

export default class Foo {
    doSomethingOnline() {
        if (!isOnline()) throw new Error('Not online');

        /* More implementation */            
    }
}
Run Code Online (Sandbox Code Playgroud)

......并确定性地测试这样......

// Foo.test.js
it('throws when offline', () => {
    const Utils = require('../services/Utils');
    Utils.isOnline …
Run Code Online (Sandbox Code Playgroud)

javascript dependencies unit-testing jestjs babel-jest

49
推荐指数
5
解决办法
5万
查看次数

在React.js中编辑丰富的数据结构

我正在尝试为数据结构创建一个简单的基于网格的编辑器,我对React.js有一些概念上的问题.他们的文档对此没有多大帮助,所以我希望有人可以提供帮助.

首先,将状态从外部组件转移到内部组件的正确方法是什么?是否有可能将内部组件中的状态更改"冒泡"到外部组件?

其次,两个独立的组件可以共享数据,从而一个中的突变在另一个中可见吗?

下面是我想要做的事情的简化示例(JSFiddle版本):

我有一个company包含employee对象数组的对象.我想employee在可编辑的网格中列出列表.当我单击按钮时,我想查看生成的company对象以及任何突变(写入控制台).

/** @jsx React.DOM */

var Cell = React.createClass({
    getInitialState: function () {
        return {data: ""};
    },

    componentWillMount: function () {
        this.setState({data: this.props.data});
    },
    onChange: function (evt) {
        console.log(this.state, evt.target.value);
        this.setState({data: evt.target.value});
    },
    render: function () {
        var data = this.props.data;
        return <input value={this.state.data} onChange={this.onChange} />
    }
});

var Row = React.createClass({
    render: function () {
        return (<div className="row">
            <Cell data={this.props.data.name} />
            <Cell data={this.props.data.location} />
            <Cell …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs

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

将单个背景渐变应用于表格行

是否可以有一个跨越整个表行的背景渐变?我只能将背景应用于单个表格单元格,即使我专门试图阻止它.这是一个针对jsfiddle上的Webkit的简化示例:

http://jsfiddle.net/cGV47/2/

正如你所看到的,我使用border-collapse:collapse,我指定background:transparent<tr><th>子元素,但重复每个单元格的红色渐变到左边.我已经尝试将背景应用于<tr>同样的,但结果与您现在看到的结果相同.

要查看代码而不使用jsfiddle,这里是:

HTML

<table>
    <thead>
        <tr>
            <th>One</th>
            <th>Two</th>
            <th>Three</th>
            <th>Four</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>un</td>
            <td>deux</td>
            <td>trois</td>
            <td>quatre</td>
        </tr>
    </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

CSS

* {margin:0;padding:0;border:0;border-collapse:collapse;}
table { width:100%; }
thead { background: -webkit-linear-gradient(left, rgba(222,22,22,1) 0%, rgba(222,222,222,0) 20%, rgba(222,222,222,0) 80%, rgba(222,222,222,1) 100%); }
thead tr, thead th { background:transparent; }
Run Code Online (Sandbox Code Playgroud)

css css3

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

最小的方式来唯一识别Android用户

如何唯一标识已安装应用程序的用户,以便:

  1. 如果他们删除并重新安装您的应用,您将知道他们是谁;
  2. 如果他们将应用程序安装在他们打算同时使用的第二台设备上,您会知道是他们吗?

举个例子,我看到Netflix应用会在没有任何用户互动的情况下自动链接到您的桌面帐户.我猜他们使用accountManager.getAccounts()或类似的方法,因为他们也需要GET_ACCOUNTS许可.但当然,该许可被标记为Protection level: dangerous.是否有任何技术可以做到这种侵入性较小或可能令人担忧的技术?


回答这个问题的关键是既简单(对用户而言)和微创.Android提供了大量识别用户的方法,其中许多方法涉及刺破用户的隐私,如果这是唯一的方法,我会做我现在做的事情(可选的电子邮件注册).我只想让我的应用程序知道用户是否已经在我的系统中在整个安装过程中注册,而无需访问用户(用户名/密码,电子邮件地址,第三方OAuth等).

我的主要原因是:

  1. 我不希望重新安装后孤立其内容的用户提出支持请求; 和
  2. 我不想托管很多孤立的内容.

android identity android-permissions

23
推荐指数
1
解决办法
1456
查看次数

在Chrome中对对象数组进行排序

编辑:正如下面kennytm和调查自己后指出,根据ECMA规范,当两个物体被确定为在自定义排序相同,JavaScript是不是必须离开以相同的顺序这两个对象.Chrome和Opera是唯一两种选择不稳定排序的主要浏览器,但其他浏览器包括Netscape 8&9,Kazehakaze,IceApe和其他一些浏览器.Chromium团队已将此错误标记为"按预期工作",因此不会"修复".如果您需要数组在值相等时保持其原始顺序,则需要使用一些其他机制(例如上面的那个).0排序对象时返回实际上是没有意义的,所以不要打扰.


我刚刚得到一份报告,我写的一些代码在Chrome上打破了.我已经将它跟踪到我用于对对象数组进行排序的自定义方法.我真的很想把它称为一个错误,但我不确定是不是.

在对所有其他浏览器排序对象数组时,如果两个对象解析为相同的值,则更新后的数组中的顺序保持不变.在Chrome中,他们的订单似乎是随机的.在Chrome和您想要的任何其他浏览器中运行以下代码.你应该明白我的意思.

我有两个问题:

首先,我是否正确地假设当您的自定义分拣机返回时0,两个比较的项目保持其原始顺序(我有一种感觉我错了).

第二,有什么好方法可以解决这个问题吗?我唯一能想到的是在排序之前将自动递增数字作为属性添加到数组的每个成员,然后在两个项目sort将resolve与同一值进行比较时使用该值.换句话说,永远不会返回0.

这是示例代码:

var x = [
{'a':2,'b':1},
{'a':1,'b':2},
{'a':1,'b':3},
{'a':1,'b':4},
{'a':1,'b':5},
{'a':1,'b':6},
{'a':0,'b':7},
]

var customSort = function(a,b) {
    if (a.a === b.a) return 0;
    if (a.a > b.a) return 1;
    return -1;
};

console.log("before sorting");
for (var i = 0; i < x.length; i++) {
    console.log(x[i].b);
}
x.sort(customSort);

console.log("after sorting");
for (var i = 0; i < x.length; i++) {
    console.log(x[i].b); …
Run Code Online (Sandbox Code Playgroud)

javascript sorting google-chrome

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

在Node.js中处理多个并行HTTP请求

我知道Node是非阻塞的,但我只是意识到默认行为http.listen(8000)意味着所有HTTP请求都是一次一个地处理.我知道我不应该对此感到惊讶(这是端口如何工作),但它确实让我真的想知道如何编写我的代码以便我可以处理多个并行HTTP请求.

那么编写服务器的最佳方法是什么,以便它不会占用端口80并且长时间运行的响应不会导致长请求队列?

要说明问题,请尝试运行下面的代码并同时将其加载到两个浏览器选项卡中.

var http = require('http');
http.createServer(function (req, res) {
    res.setHeader('Content-Type', 'text/html; charset=utf-8');
    res.write("<p>" + new Date().toString() + ": starting response");
    setTimeout(function () {
        res.write("<p>" + new Date().toString() + ": completing response and closing connection</p>");
        res.end();
    }, 4000);
}).listen(8080);
Run Code Online (Sandbox Code Playgroud)

node.js

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

Safari没有使用JS Fetch API设置CORS cookie

Set-Cookie在使用Fetch API时(实际上,通过fetch polyfill),我无法让Safari成功应用服务器响应.相同的代码在FF和Chrome中正常工作(我使用native和polyfill进行了测试fetch).

  1. 请求跨域;
  2. 是的,我正在设定credentials: true;
  3. 服务器确实用Set-Cookie标题响应;
  4. 后续请求是从Chrome和FF发送的,带有Cookie请求标头,但Safari不会;
  5. 请求使用HTTPS(证书是自签名的,在开发域上,但似乎是常规请求上的Safari接受); 和

有人知道问题可能是什么吗?

我已经阅读了文档,并浏览了许多已关闭的错误报告.除非我遗漏了一些东西,否则我认为问题可能是"默认浏览器行为"处理cookie和CORS - 而不是fetch(通过polyfill源代码阅读,它似乎100%无知cookie).一些错误报告表明,格式错误的服务器响应可能会阻止cookie被保存.

我的代码看起来像这样:

function buildFetch(url, init={}) {
    let headers = Object.assign({}, init.headers || {}, {'Content-Type': 'application/json'});
    let params = Object.assign({}, init, { credentials: 'include', headers });

    return fetch(`${baseUrl}${url}`, params);
}

buildFetch('/remote/connect', {method: 'PUT', body: JSON.stringify({ code })})
.then(response => response.json())
.then(/* complete authentication */)
Run Code Online (Sandbox Code Playgroud)

实际的授权请求如下.我正在使用cURL来获取确切的请求/响应数据,因为Safari很难复制/粘贴它.

curl 'https://mydevserver:8443/api/v1/remote/connect' \
-v \
-XPUT \
-H 'Content-Type: application/json' …
Run Code Online (Sandbox Code Playgroud)

javascript cookies safari fetch cors

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

无法在流浪盒上创建工作的meteor.js项目

我无法在Vagrant linux机器上启动新的Meteor应用程序(在Mac上运行).每次在Mongo中出现"未指定的未捕获异常"时它都会失败.我已经尝试了很多东西来实现这一目标,但即使使用最简单的设置,我也无法让项目运行.我会很感激任何建议.

我的步骤是:

  1. 创建一个完全干净的Vagrant框("ubuntu/trusty64");
  2. 在新盒子上安装Meteor(curl https://install.meteor.com/ | sh);
  3. 选择一个位置来创建项目;
  4. 创建一个新的Meteor项目(meteor create app);
  5. 启动项目(cd app; meteor)

我知道vagrant共享文件夹的权限很古怪,所以对于上面的第3步,我尝试了放置项目:

  1. 在共享的guest/host文件夹中/vagrant,
  2. 在Vagrant主文件夹(/home/vagrant)的子目录中,
  3. /(权限设置为vagrant:vagrant)的子目录中,和
  4. /权限设置为的子目录中,root:root使用sudo meteor create app和运行创建的项目sudo meteor

在所有情况下,我都看到了这个错误:

=> Started proxy.
Unexpected mongo exit code 100. Restarting.
Unexpected mongo exit code 100. Restarting.
Unexpected mongo exit code 100. Restarting.
Can't start Mongo server.
MongoDB had an unspecified uncaught exception.
This can be …
Run Code Online (Sandbox Code Playgroud)

mongodb vagrant meteor

12
推荐指数
1
解决办法
4931
查看次数

为什么mp4视频在iPad上播放得很好,而不是在iPhone上?

我对这个问题感到非常难过.

我有一个大型的H.264 mp4视频文件库,我需要在iOS上播放.最初,我只针对iPad,但要求已经改变,现在我需要包括iPhone.但我注意到我的iPod Touch与我的iPad具有完全相同的操作系统版本和内置ID,将无法播放我在iPad上成功使用的相同文件.我已经与一位同事拥有相同版本和版本的iPhone和iPad确认了这一点.我在iPad模拟器中也看到过完全相同的行为,但直到现在我才认为它是模拟器的怪癖.现在我不太确定.

mp4使用以下设置进行编码:

AVC Coding 640x360, Millions
AAC, Stereo (L R), 44.100 kHz
29.97 fps
693.35kb/s
Run Code Online (Sandbox Code Playgroud)

我已经尝试从多个服务器甚至本地加载媒体,它似乎没有什么区别.

如果我将这些文件从QuickTime导出为m4v文件,它们可以在所有设备和模拟器上正常运行,所以我的直觉告诉我这是一个我缺少的编码器设置.

为了消除所有其他可能的因素,我尝试直接从Mobile Safari地址栏调用视频文件.我已经确认在以下匹配版本中发生了这种情况:

设备:

  • 4.2.1(8C148) - 在iPad上播放,而不是在iPhone上播放.

模拟器:

  • 3.2(7W367a) - 在iPad上播放没问题(没有iPhone版)
  • 4.0.2(8A400) - 不玩iPhone(没有iPad版)
  • 4.1(8B117) - 不玩iPhone(没有iPad版)
  • 4.2(8C134) - 不播放iPhone或iPad

我已经浏览了iOS更新日志,寻找任何可能解释为什么视频解压缩器应该在一个版本而不是另一个版本上工作的东西,我找不到任何跳出来的东西.

任何人都有任何想法可以支持这个以及如何解决它?

iphone video codec ipad

11
推荐指数
1
解决办法
9187
查看次数