私はSequelize.jsをORMとして実行しているエクスプレスアプリを持っています。私のエクスプレスアプリはメインのRailsアプリからリクエストを受け取り、クロスドメインポリシーのためにこれらのリクエストはgetJSONで実行されます。リクエストが多すぎるExpressJSバックエンド
クライアントでは、ユーザーがキーを押すと要求が発生します。 すべてがうまくいって、ユーザーがキーを押すたびに、実行されているクエリ(およびjsonが提供されている)を記録します。すばやくヒットしようとしても、それはOKです。しかし、キーを押したままにしておくと(あるいは、いくつかのクライアントが非常に素早くキーに当たったとき)、要求が多く発せられる瞬間に、サーバがハングするだけで、その時点からのすべてのリクエストは保留されますChrome Dev Toolsの[ネットワーク]タブで)、ゆっくりタイムアウトし始めます。私はそれを再度応答させるためにサーバをリブートする必要があります。
私の要求のためのサーバー・コードは次のとおりです。
models.Comment.findAllPublic(req.params.pId, req.params.sId, function(comments){
var json = comments.map(function(comment){
var com = {};
['user_id','user_avatar', 'user_slug', 'user_name', 'created_at', 'text', 'private', 'is_speaker_note'].forEach(function(key){
com[key]=comment[key];
});
return com;
});
res.json({comments: json});
});
、コメントモデルからfindAllPublic方法は、(これはSequelizeモデルである)である:
findAllPublicAndMyNotes: function(current_user, presentationId, slideId, cb){
db.query("SELECT * FROM `comments` WHERE commentable_type='Slide' AND commentable_id=(SELECT id from `slides` where `order_in_presentation`="+slideId+" AND `presentation_id`="+presentationId+") AND (`private` IS FALSE OR (`private` IS TRUE AND `user_id`="+current_user+" AND `is_speaker_note` IS FALSE))",self.Comment).on('success', cb).on('failure',function(err){console.log(err);});
}
なってからサーバーを回避する方法立ち往生?私はいくつかのブロックコードをリクエストに残していますが、新しいリクエストが行われたときにサーバーがゆっくりとハングすることがありますか?
Sequelizeモデルからjsonオブジェクトを作成するときに "forEach"が原因で問題になる可能性があると思っていましたが、mysqlクエリのコールバックを空のままにして空のjsonに応答しました。フローズン。
多分mysqlコネクタの問題ですか?サーバーが動かなくなったら、通常はmysqlコンソールを実行してデータベースにクエリを実行し、それも応答します。それで問題があるかどうかわかりません。
キーが長時間押されたときにリクエストが多すぎるのを防ぐためにキーイベントを制御できることはわかっていますが、複数のクライアントが繰り返しキーを同時に押したときにも問題が発生しているようです。
どのような考えですか?助けを事前に感謝:D
あなたはautosuggestのようなものを作成していますか? –