簡體   English   中英

Socket.io/nodejs的發射問題

[英]Socket.io/nodejs problems with emit

我目前正在開發一個小型測試游戲,並且注意到套接字發射發送的信息存在一些嚴重的延遲。 上下文是o擁有一個可以投籃的球員,每次投籃時,他都會將帶有子彈信息的信息發送給服務器,然后服務器廣播給其他球員。 我的問題是,發送大量發射的播放器的此工作流程是否會減慢socket.io的執行。 我注意到的另一件事是,有時套接字內的console.log不會在控制台中顯示一段時間(如果這兩個原因相同,則為idk)

Client emiting..
shoot(){
  socket.emit('newBullet', bullet.position, bullet.direction,bullet.damage);
}

Server receiving emits..
socket.on('newBullet', function(position, direction, damage){
      socket.broadcast.emit('spawnBullet', position, direction, damage);
});

Other clients receiving broadcast..
socket.on('spawnBullet', function(position, direction, damage){
      const b = new bullet(position, direction, damage);
      player.bullets.push(b);
});

我的問題是,發送大量發射的播放器的此工作流程是否會減慢socket.io的執行。

是的,它可以。

這完全取決於您的服務器是否可以保持運行狀態以及客戶端是否可以保持運行狀態。 對於給定的服務器,肯定存在着來自所有客戶端的消息,表明該消息很難跟上並執行應做的任何其他事情。

同樣,如果許多客戶端都向服務器發送消息,從而使其廣播到所有其他客戶端,則這可能會迅速增加多達一堆消息,以供服務器發送並由客戶端進行處理。

存在一些智能設計,它們可以檢測何時更新速度過快,並且會采取某些措施來緩解這種情況(也許跳過已被隊列中其他消息取代的消息)。 想象一下與鼠標驅動程序相同的概念,它試圖顯示鼠標在屏幕上每個像素處的移動,但是如果移動得足夠快,它將跳過中間的鼠標渲染,並且僅在渲染鼠標時顯示最新位置。 當周圍有太多更新時,您可能想做類似的事情。

我注意到的另一件事是,有時套接字內的console.log不會在控制台中顯示一段時間(如果這兩個原因相同,則為idk)

這聽起來像是滯后。 服務器或客戶端不堪重負,並且數據輸入的速度快於其跟上的速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM