Heroku上的Node.js和Express with socket.io - H12& H13错误

时间:2016-09-10 15:03:52

标签: node.js express heroku socket.io

目前使用Node,Express和Socket.io构建一个运行Heroku Standard-1X dyno的项目。该应用程序的前提非常简单:人们从客户端搜索物品(存储在引擎盖下作为Dicts,如此):

    ['Item':'Coffee', 
    'Id':0247508725,
    'Location': 'Baker Street']

并选择它们,然后将项目键值推送到节点服务器并存储在列表中。该列表不是由其他客户在实时'中检索的。客户端都是原生的Swift iOS应用程序

我第一次使用大约60个用户运行它,同时搜索和添加项目。 Heroku仪表板的结果非常可怕:

Heroku Dashboard

我以为我在测试中已经彻底,我从未见过如此多的H12& H13错误。我的一部分认为它可能是我服务器端的低效代码,或者只是缺乏适当的Node实现来处理这么多请求所以我不会因为整个单线程交易而不断等待I / O.

以下是运行以在该列表上添加项目的功能服务器端示例:

clientSocket.on("additionToList", function(Location,Item,Id){
  client.query("INSERT q_venue_list (item_name, item_id, at_location) VALUES ($1, $2, $3)",[Item,Id,Location], function(err, result) {
if(err) {
  return console.error('error running insert', err);
}
io.sockets.in(Location).emit('updateList');
  });
});

当房间Location中的客户端套接字收到'updateList'命令时,它们会拉出新列表。存储和检索一切正常,但由于某些原因,所有这些人,一切都陷入困境,非常滞后。 我几乎不知道我在做什么,但我只是想了解我可能会出错的地方。我不能集群,因为我只能访问一个核心,所以下一个最好的选择是探索异步?这可能是一个可怕的设备信号,再加上等待导致所有超时的I / O?

我只是想了解这一点,感谢任何帮助。如果我能提供更多信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

对于遇到这个奇怪问题的人来说,我最终想出了问题所在。我没有在socket.disconnectapplicationDidEnterBackground上释放套接字层并断开连接(applicationWillResignActive)。这导致后端的套接字等待超时(55秒)。它等待的整个时间,它正在阻塞事件循环的其余部分;因此,其他传入的请求会等待,然后它们也会超时。

tl; dr :要努力打开和关闭你的插座。当用户退出应用程序时,不要忘记关闭它们。