diff --git a/content/docs/websockets.md b/content/docs/websockets.md
index d7e0f20..4e200cf 100644
--- a/content/docs/websockets.md
+++ b/content/docs/websockets.md
@@ -18,7 +18,7 @@ The following is an example of a simple websocket echo server:
 > An example chat server with the ability to chat over a websocket or tcp connection
 > is available in [websocket-chat directory][chat]
 
-[message]: https://docs.rs/actix-web-actors/1.0.0/actix_web_actors/ws/enum.Message.html
-[payload]: https://docs.rs/actix-web/1.0.2/actix_web/web/struct.Payload.html
+[message]: https://docs.rs/actix-web-actors/2/actix_web_actors/ws/enum.Message.html
+[payload]: https://docs.rs/actix-web/2/actix_web/web/struct.Payload.html
 [examples]: https://github.com/actix/examples/tree/master/websocket/
 [chat]: https://github.com/actix/examples/tree/master/websocket-chat/
diff --git a/examples/websockets/Cargo.toml b/examples/websockets/Cargo.toml
index e8f5b50..1f58706 100644
--- a/examples/websockets/Cargo.toml
+++ b/examples/websockets/Cargo.toml
@@ -4,6 +4,7 @@ version = "1.0.0"
 edition = "2018"
 
 [dependencies]
-actix = "0.8"
-actix-web = "1.0"
-actix-web-actors = "1.0"
+actix = "0.9"
+actix-rt = "1.0"
+actix-web = "2.0"
+actix-web-actors = "2.0"
diff --git a/examples/websockets/src/main.rs b/examples/websockets/src/main.rs
index fd49c5c..8198d34 100644
--- a/examples/websockets/src/main.rs
+++ b/examples/websockets/src/main.rs
@@ -11,29 +11,33 @@ impl Actor for MyWs {
 }
 
 /// Handler for ws::Message message
-impl StreamHandler<ws::Message, ws::ProtocolError> for MyWs {
-    fn handle(&mut self, msg: ws::Message, ctx: &mut Self::Context) {
+impl StreamHandler<Result<ws::Message, ws::ProtocolError>> for MyWs {
+    fn handle(
+        &mut self,
+        msg: Result<ws::Message, ws::ProtocolError>,
+        ctx: &mut Self::Context,
+    ) {
         match msg {
-            ws::Message::Ping(msg) => ctx.pong(&msg),
-            ws::Message::Text(text) => ctx.text(text),
-            ws::Message::Binary(bin) => ctx.binary(bin),
+            Ok(ws::Message::Ping(msg)) => ctx.pong(&msg),
+            Ok(ws::Message::Text(text)) => ctx.text(text),
+            Ok(ws::Message::Binary(bin)) => ctx.binary(bin),
             _ => (),
         }
     }
 }
 
-fn index(req: HttpRequest, stream: web::Payload) -> Result<HttpResponse, Error> {
+async fn index(req: HttpRequest, stream: web::Payload) -> Result<HttpResponse, Error> {
     let resp = ws::start(MyWs {}, &req, stream);
     println!("{:?}", resp);
     resp
 }
 
-fn main() {
+#[actix_rt::main]
+async fn main() -> std::io::Result<()> {
     HttpServer::new(|| App::new().route("/ws/", web::get().to(index)))
-        .bind("127.0.0.1:8088")
-        .unwrap()
+        .bind("127.0.0.1:8088")?
         .run()
-        .unwrap();
+        .await
 }
 // </websockets>