Skip to content

Commit 0f0883c

Browse files
committed
feat: eventbus 减少不必要的clone次数
1 parent 007fa0a commit 0f0883c

3 files changed

Lines changed: 13 additions & 5 deletions

File tree

resource/static/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
var videoElement = document.getElementById('videoElement');
77
videoElement.controls=true
88
videoElement.muted=true
9-
videoElement.width="640"
10-
videoElement.height="480"
9+
videoElement.width="960"
10+
videoElement.height="540"
1111
videoElement.autoplay=true
1212

1313
var flvPlayer = flvjs.createPlayer({

src/eventbus.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ impl<E: 'static + Clone> EventBus<E> {
2020
pub async fn publish(&self, val: E) {
2121
let mut dropped_senders: Vec<u64> = vec![];
2222

23-
let keys: Vec<u64> = self.tx_map.iter().map(|x| x.key().to_owned()).collect();
23+
let mut keys: Vec<u64> = self.tx_map.iter().map(|x| x.key().to_owned()).collect();
24+
let last_key = keys.pop();
2425

2526
for key in keys {
2627
if let Some(entry) = self.tx_map.get(&key) {
@@ -29,6 +30,15 @@ impl<E: 'static + Clone> EventBus<E> {
2930
}
3031
}
3132
}
33+
// 最后一个元素可以直接发送,减少一次clone
34+
if let Some(key) = last_key {
35+
if let Some(entry) = self.tx_map.get(&key) {
36+
if let Err(_) = entry.send(val).await {
37+
dropped_senders.push(key);
38+
}
39+
}
40+
}
41+
3242
for key in dropped_senders.iter() {
3343
self.tx_map.remove(key);
3444
log::info!("[EventBus][{}] remove receiver {}", self.label, key);

src/rtmp_server.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ use smol::net::{TcpListener, TcpStream};
88
use smol::prelude::*;
99

1010
use crate::eventbus::EventBus;
11-
use crate::protocol::flv::save_flv_background;
1211
use crate::protocol::rtmp::{
1312
ChunkMessageType, Handshake0, Handshake1, Handshake2, RtmpContext, RtmpMessage, RtmpMetaData,
1413
};
@@ -191,7 +190,6 @@ async fn connection_loop(stream: TcpStream) -> anyhow::Result<()> {
191190
EventBus::with_label(ctx.stream_name.clone()),
192191
);
193192
ctx.is_publisher = true;
194-
save_flv_background(&ctx.stream_name, ctx.peer_addr.clone());
195193
response_publish(&mut ctx).await?;
196194
}
197195
"play" => {

0 commit comments

Comments
 (0)