mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Net: fold websocket and http tokio runtime into one (#31771)
* net: use the same tokio runtime in websocket loader #31648 * readability * license
This commit is contained in:
parent
2789e98876
commit
5c0199b568
6 changed files with 19 additions and 19 deletions
12
components/net/async_runtime.rs
Normal file
12
components/net/async_runtime.rs
Normal file
|
@ -0,0 +1,12 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use std::sync::Mutex;
|
||||
|
||||
use lazy_static::lazy_static;
|
||||
use tokio::runtime::Runtime;
|
||||
|
||||
lazy_static! {
|
||||
pub static ref HANDLE: Mutex<Option<Runtime>> = Mutex::new(Some(Runtime::new().unwrap()));
|
||||
}
|
|
@ -18,8 +18,8 @@ use log::warn;
|
|||
use rustls::client::WebPkiVerifier;
|
||||
use rustls::{Certificate, ClientConfig, OwnedTrustAnchor, RootCertStore, ServerName};
|
||||
|
||||
use crate::async_runtime::HANDLE;
|
||||
use crate::hosts::replace_host;
|
||||
use crate::http_loader::HANDLE;
|
||||
|
||||
pub const BUF_SIZE: usize = 32768;
|
||||
|
||||
|
|
|
@ -31,7 +31,6 @@ use hyper::{Body, Client, Response as HyperResponse};
|
|||
use hyper_serde::Serde;
|
||||
use ipc_channel::ipc::{self, IpcSender};
|
||||
use ipc_channel::router::ROUTER;
|
||||
use lazy_static::lazy_static;
|
||||
use log::{debug, error, info, log_enabled, warn};
|
||||
use msg::constellation_msg::{HistoryStateId, PipelineId};
|
||||
use net_traits::pub_domains::reg_suffix;
|
||||
|
@ -50,13 +49,13 @@ use net_traits::{
|
|||
};
|
||||
use servo_arc::Arc;
|
||||
use servo_url::{ImmutableOrigin, ServoUrl};
|
||||
use tokio::runtime::Runtime;
|
||||
use tokio::sync::mpsc::{
|
||||
channel, unbounded_channel, Receiver as TokioReceiver, Sender as TokioSender,
|
||||
UnboundedReceiver, UnboundedSender,
|
||||
};
|
||||
use tokio_stream::wrappers::ReceiverStream;
|
||||
|
||||
use crate::async_runtime::HANDLE;
|
||||
use crate::connector::{
|
||||
create_http_client, create_tls_config, CACertificates, CertificateErrorOverrideManager,
|
||||
Connector,
|
||||
|
@ -70,10 +69,6 @@ use crate::hsts::HstsList;
|
|||
use crate::http_cache::{CacheKey, HttpCache};
|
||||
use crate::resource_thread::AuthCache;
|
||||
|
||||
lazy_static! {
|
||||
pub static ref HANDLE: Mutex<Option<Runtime>> = Mutex::new(Some(Runtime::new().unwrap()));
|
||||
}
|
||||
|
||||
/// The various states an entry of the HttpCache can be in.
|
||||
#[derive(Clone, Debug, Eq, PartialEq)]
|
||||
pub enum HttpCacheEntryState {
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#![deny(unsafe_code)]
|
||||
|
||||
pub mod async_runtime;
|
||||
pub mod connector;
|
||||
pub mod cookie;
|
||||
pub mod cookie_storage;
|
||||
|
|
|
@ -39,6 +39,7 @@ use serde::{Deserialize, Serialize};
|
|||
use servo_arc::Arc as ServoArc;
|
||||
use servo_url::{ImmutableOrigin, ServoUrl};
|
||||
|
||||
use crate::async_runtime::HANDLE;
|
||||
use crate::connector::{
|
||||
create_http_client, create_tls_config, CACertificates, CertificateErrorOverrideManager,
|
||||
};
|
||||
|
@ -48,7 +49,7 @@ use crate::fetch::methods::{fetch, CancellationListener, FetchContext};
|
|||
use crate::filemanager_thread::FileManager;
|
||||
use crate::hsts::HstsList;
|
||||
use crate::http_cache::HttpCache;
|
||||
use crate::http_loader::{http_redirect_fetch, HttpState, HANDLE};
|
||||
use crate::http_loader::{http_redirect_fetch, HttpState};
|
||||
use crate::storage_thread::StorageThreadFactory;
|
||||
use crate::{cookie, websocket_loader};
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
//! the need for a dedicated thread per websocket.
|
||||
|
||||
use std::sync::atomic::{AtomicBool, Ordering};
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::sync::Arc;
|
||||
|
||||
use async_tungstenite::tokio::{client_async_tls_with_connector_and_config, ConnectStream};
|
||||
use async_tungstenite::WebSocketStream;
|
||||
|
@ -23,13 +23,11 @@ use futures::stream::StreamExt;
|
|||
use http::header::{self, HeaderName, HeaderValue};
|
||||
use ipc_channel::ipc::{IpcReceiver, IpcSender};
|
||||
use ipc_channel::router::ROUTER;
|
||||
use lazy_static::lazy_static;
|
||||
use log::{debug, trace, warn};
|
||||
use net_traits::request::{RequestBuilder, RequestMode};
|
||||
use net_traits::{CookieSource, MessageData, WebSocketDomAction, WebSocketNetworkEvent};
|
||||
use servo_url::ServoUrl;
|
||||
use tokio::net::TcpStream;
|
||||
use tokio::runtime::Runtime;
|
||||
use tokio::select;
|
||||
use tokio::sync::mpsc::{unbounded_channel, UnboundedReceiver};
|
||||
use tokio_rustls::TlsConnector;
|
||||
|
@ -39,19 +37,12 @@ use tungstenite::protocol::CloseFrame;
|
|||
use tungstenite::Message;
|
||||
use url::Url;
|
||||
|
||||
use crate::async_runtime::HANDLE;
|
||||
use crate::connector::{create_tls_config, CACertificates, TlsConfig};
|
||||
use crate::cookie::Cookie;
|
||||
use crate::fetch::methods::should_be_blocked_due_to_bad_port;
|
||||
use crate::hosts::replace_host;
|
||||
use crate::http_loader::HttpState;
|
||||
|
||||
// Websockets get their own tokio runtime that's independent of the one used for
|
||||
// HTTP connections, otherwise a large number of websockets could occupy all workers
|
||||
// and starve other network traffic.
|
||||
lazy_static! {
|
||||
pub static ref HANDLE: Mutex<Option<Runtime>> = Mutex::new(Some(Runtime::new().unwrap()));
|
||||
}
|
||||
|
||||
/// Create a tungstenite Request object for the initial HTTP request.
|
||||
/// This request contains `Origin`, `Sec-WebSocket-Protocol`, `Authorization`,
|
||||
/// and `Cookie` headers as appropriate.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue