小编ash*_*540的帖子

WebSocket连接失败:WebSocket握手期间出错:意外响应代码:400

我正在尝试将Socket.io与Angular集成,并且我很难从客户端到服务器建立连接.我查看了其他相关问题,但我的问题是在本地发生的,所以中间没有Web服务器.

这就是我的服务器代码:

const app = express();
const server = http.createServer(app);
const io = require('socket.io').listen(server);

io.on('connection', function(socket) {
  socket.emit('greet', { hello: 'Hey, Mr.Client!' });

  socket.on('respond', function(data) {
    console.log(data);
  });
  socket.on('disconnect', function() {
    console.log('Socket disconnected');
  });
});
Run Code Online (Sandbox Code Playgroud)

我按以下顺序使用Grunt加载客户端JavaScript文件:

dist: {
    src: [
        public/bower_components/angular/angular.min.js,
        ...
        public/bower_components/socket.io-client/dist/socket.io.min.js,
        public/bower_components/angular-socket-io/socket.min.js,
        ...
    ]
}
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器中:

function MyController($scope) {

    let socket = io.connect(window.location.href);
    socket.connect('http://localhost:3000');
    socket.on('greet', function(data) {
      console.log(data);
      socket.emit('respond', { message: 'Hello to you too, Mr.Server!' });
    });

    ...
}
Run Code Online (Sandbox Code Playgroud)

在实际使用btford/angular-socket-io库之前,我想确保我可以正确获得连接,但是在控制台中出现以下错误:

socket io连接错误消息

有趣的是,如果我重新启动Node.js服务器进程,它确实设法发送消息,但使用轮询而不是websockets.

重启后

投票信息

我在socket.connect调用中尝试了各种不同的选项,但没有任何效果.

任何帮助,将不胜感激.


更新(2016年12月30日):

我刚刚意识到websockets部分工作.我在Chrome开发者控制台中看到了101切换协议请求.但是我看到的唯一框架是engine.io协议包(ping,pong).但是我的应用程序套接字消息仍然由于某种原因而退回到轮询...

engine.io数据包

javascript sockets node.js socket.io angularjs

41
推荐指数
7
解决办法
10万
查看次数

MongoDB $ lookup不使用索引

我正在编写一个需要在两个表之间进行$ lookup的查询,据我所知,对ForeignField拥有索引以便及时执行此连接至关重要。但是,即使在字段上添加了索引之后,查询仍然会回退到COLLSCAN。

db.users.aggregate([
  {$lookup:{ from: "transactions", localField: '_id', foreignField: 'uid', as: 'transaction' }},
  { $match: { transaction: { "$size" : 0} } },
  { $count: "total"},
], { explain: true })
Run Code Online (Sandbox Code Playgroud)

返回:

"queryPlanner" : {
    "plannerVersion" : 1,
    "namespace" : "test.users",
    "indexFilterSet" : false,
    "parsedQuery" : {

    },
    "winningPlan" : {
        "stage" : "COLLSCAN",
        "direction" : "forward"
    },
    "rejectedPlans" : [ ]
}
Run Code Online (Sandbox Code Playgroud)

如前所述,我确实在事务集合中索引了uid字段:

> db.transactions.getIndexes()
[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        }, …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-shell mongodb-query aggregation-framework

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

如何使用MongoDB聚合框架计算满足特定条件的组数?

我有一个使用几个组的 MongoDB 聚合操作:

{ $group: { "_id": { "vid": "$visitor_id", "pid":"$project.id" } } }
{ $group: { "_id": "$_id.vid", "count": { $sum: 1} } }
Run Code Online (Sandbox Code Playgroud)

返回以下数据:

{
  "results": [
    {
      "_id": "user1",
      "count": 1
    }, 
    {
      "_id": "user2",
      "count": 2
    },
    {
      "_id": "user3",
      "count": 1
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我如何才能返回具有 1 个以上项目(count字段)的用户总数。在这种情况下,它将类似于:

{
  total: 1
}
Run Code Online (Sandbox Code Playgroud)

因为只有user21 个以上的项目(count> 1)。

我尝试添加以下组操作无济于事:

{ 
  $group: { 
    "_id": null, 
    count: {
      $sum: {$cond: [{$gt: ['$_id.count', 1]}, 1, 0]} …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework node-mongodb-native

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

如何根据条件推送一个字段?

我试图在MongoDB聚合管道的$ group阶段有条件地将字段推入数组.

基本上我有包含用户名的文档,以及他们执行的操作数组.

如果我将用户操作分组如下:

{ $group: { _id: { "name": "$user.name" }, "actions": { $push: $action"} } }
Run Code Online (Sandbox Code Playgroud)

我得到以下内容:

[{
    "_id": {
        "name": "Bob"
    },
    "actions": ["add", "wait", "subtract"]
}, {
    "_id": {
        "name": "Susan"
    },
    "actions": ["add"]
}, {
    "_id": {
        "name": "Susan"
    },
    "actions": ["add, subtract"]
}]
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.现在的想法是将actions数组组合在一起,以查看哪组用户操作最受欢迎.问题是我需要在考虑组之前删除"等待"操作.因此,结果应该是这样的,考虑到在分组中不应该考虑"wait"元素:

[{
    "_id": ["add"],
    "total": 1
}, {
    "_id": ["add", "subtract"],
    "total": 2
}]
Run Code Online (Sandbox Code Playgroud)

测试#1

如果我添加这个$ group阶段:

{ $group : { _id : "$actions", total: { $sum: 1} }} …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

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