【发布时间】:2017-01-18 12:51:02
【问题描述】:
目前正在使用 Node、Express 和 Socket.io 构建一个运行 Heroku Standard-1X dyno 的项目。该应用程序的前提相当简单:人们从客户端搜索项目(作为字典存储在引擎盖下,就像这样):
['Item':'Coffee',
'Id':0247508725,
'Location': 'Baker Street']
并选择它们,然后将项目键值推送到节点服务器并存储在列表中。其余客户端“实时”检索该列表。客户端都是原生构建的 Swift iOS 应用
我第一次运行它时大约有 60 个用户,所有用户同时搜索和添加项目。 Heroku 仪表板的结果非常可怕:
我以为我测试得很彻底,我从未见过这么多 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?
我只是想了解这一点,感谢任何帮助。如果我能提供更多信息,请告诉我。
【问题讨论】:
-
如果没有更多代码,我无法真正分辨出怎么了上下,但似乎很多错误表明你没有利用 Node 的异步潜力。
-
@sova 你可能是对的。您是否遇到过任何资源,可以用更通俗的术语很好地为正在学习的人提供这些概念?
-
好吧,最近自己刚刚掌握了回调模型,我强烈推荐codeschool的课程“使用node.js的实时网络”一些视频和互动练习来帮助你了解要点。尝试阅读 javascript 事件循环作为一个很好的补充。
-
你是把socket.io附加到http服务器上,还是在每个expresses路由中都有socket.io?
-
@DavidGatti 都附在http服务器上
标签: node.js express heroku socket.io