From 3d8cdaba2c62683e0c242b363525cdd44b6e2da8 Mon Sep 17 00:00:00 2001 From: Thilo Behnke Date: Sat, 9 Jul 2022 20:48:58 +0200 Subject: [PATCH] enhancement/improve-concurrency-for-websocket-handler --- server/src/websocket_handler.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/server/src/websocket_handler.rs b/server/src/websocket_handler.rs index acf27e0..959a845 100644 --- a/server/src/websocket_handler.rs +++ b/server/src/websocket_handler.rs @@ -13,6 +13,7 @@ use log::{debug, error, info, trace}; use serde_json::json; use tokio::time::sleep; use serde::{Serialize, Deserialize}; +use tokio::task; use pong::event::event::{EventWrapper, EventWriter}; use pong::game_field::{GameState, Input}; use crate::event::{HeartBeatEventPayload, InputEventPayload, MoveEventPayload, SessionEvent, SessionEventListDTO, SessionEventPayload, SessionEventType, StatusEventPayload, TickEvent}; @@ -197,6 +198,9 @@ impl WebsocketHandler for DefaultWebsocketHandler { } _ => {} } + + trace(&websocket_session_read_copy, "kafka write done, waiting for next cycle."); + task::yield_now().await; } info!("ws receiver terminated") }); @@ -273,10 +277,8 @@ impl WebsocketHandler for DefaultWebsocketHandler { } } - // Avoid starvation of read thread (?) - // TODO: How to avoid this? This is very bad for performance. - sleep(Duration::from_millis(1)).await; - trace(&websocket_session_write_copy, "kafka read done, back to sleep") + trace(&websocket_session_write_copy, "kafka read done, waiting for next cycle."); + task::yield_now().await; } }); Ok(())