Deno 开源 fastwebsockets,Rust 编写的高性能 WebSocket 协议实现
Deno 开源了宣称速度极快的 fastwebsockets —— Rust 编写的高性能 WebSocket 协议 (RFC6455 WebSocket) 实现。
fastwebsockets 核心特性
- 可用作原生 WebSocket 帧解析器、成熟的客户端/服务器
use fastwebsockets::{Frame, OpCode, WebSocket}; async fn handle_client( mut socket: TcpStream, ) -> Result<(), Box<dyn std::error::Error + Send + Sync>> { handshake(&mut socket).await?; let mut ws = WebSocket::after_handshake(socket); ws.set_writev(true); ws.set_auto_close(true); ws.set_auto_pong(true); loop { let frame = ws.read_frame().await?; match frame { OpCode::Close => break, OpCode::Text | OpCode::Binary => { let frame = Frame::new(true, frame.opcode, None, frame.payload); ws.write_frame(frame).await?; } } } Ok(()) }
- 与 Hyper 集成
启用upgrade
功能以进行服务器端升级,以及与客户端握手。
use fastwebsockets::upgrade::upgrade; use hyper::{Request, Body, Response}; async fn server_upgrade( mut req: Request<Body>, ) -> Result<Response<Body>, Box<dyn std::error::Error + Send + Sync>> { let (response, fut) = upgrade::upgrade(&mut req)?; tokio::spawn(async move { if let Err(e) = handle_client(fut).await { eprintln!("Error in websocket connection: {}", e); } }); Ok(response) }
使用 handshake
模块进行客户端握手:
use fastwebsockets::handshake; use fastwebsockets::WebSocket; use hyper::{Request, Body, upgrade::Upgraded, header::{UPGRADE, CONNECTION}}; use tokio::net::TcpStream; use std::future::Future; // Define a type alias for convenience type Result<T> = std::result::Result<T, Box<dyn std::error::Error + Send + Sync>>; async fn connect() -> Result<WebSocket<Upgraded>> { let stream = TcpStream::connect("localhost:9001").await?; let req = Request::builder() .method("GET") .uri("http://localhost:9001/") .header("Host", "localhost:9001") .header(UPGRADE, "websocket") .header(CONNECTION, "upgrade") .header( "Sec-WebSocket-Key", fastwebsockets:🤝:generate_key(), ) .header("Sec-WebSocket-Version", "13") .body(Body::empty())?; let (ws, _) = handshake::client(&SpawnExecutor, req, stream).await?; Ok(ws) } // Tie hyper's executor to tokio runtime struct SpawnExecutor; impl<Fut> hyper::rt::Executor<Fut> for SpawnExecutor where Fut: Future + Send + 'static, Fut::Output: Send + 'static, { fn execute(&self, fut: Fut) { tokio::task::spawn(fut); } }
- 通过 Autobahn|TestSuite1 并使用 LLVM 的 libfuzzer 进行模糊测试

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
为网购操碎心,Mozilla 收购一家 AI 公司
如今的网购平台上充斥着大量虚假评价,随便查看一个商品都是 5 星好评,如何在成千上万条评价中找到最有价值的信息是普通消费者非常头疼的一件事情,它们严重影响了用户对一个产品好坏的判断。 为了改进用户的网购体验,Mozilla 在今天正式宣布已经收购了 AI 创业公司 Fakespot,这是一家提供浏览器扩展和移动端 App 来帮助用户识别和过滤虚假评论的公司,目前支持的网购平台包括亚马逊、沃尔玛、eBay、Best Buy、Shopify 和丝芙兰等,暂时不支持国内用户常用的淘宝和京东等。 Fakespot 会遍历产品的所有评论,然后使用人工智能和机器学习系统来检测评论之间的模式和相似性,以标记那些可能是虚假的评论,并为产品的评论提供一个评级,帮助消费者在购买时做出更明智的决定(官方并没有透露背后具体的运作模式)。 收购之后,Mozilla 并不会停止维护 Chrome、iOS 和 Android 版本。Mozilla 首席产品官 Steve Teixeira 在博客中表示: Fakespot 将继续支持所有主要的浏览器和移动设备,Mozilla 团队将继续增强 Fakespot 的用户...
- 下一篇
腾讯首个专利:单窗口多页浏览装置,由马化腾 20 年前发明
2001年的春天,腾讯申请了自己的第一个专利——单窗口多页浏览装置,发明人是Pony(马化腾)。 据介绍,这项专利促进了浏览器使用方式的改变——用一个窗口即可打开多页面。 当时的浏览器,如果同时打开很多网站需要额外打开新窗口,因此最后不仅搞得桌面混乱不堪,甚至还会消耗更多内存。 基于这个使用痛点,Pony 想到了一个方案——在浏览器的同一窗口显示多个网页,并在这个方案的基础上进行完善,最终形成了腾讯提出的第一个专利: 可以说,直到现在,大家在网上冲浪的时候仍在享受这项专利带来的便利。 据介绍,当年跟“单窗口多页浏览装置”同批申请的,还有“一种即时通信的系统和方法”——它就是 QQ。第一版 OICQ 的安装包只有 200kb,解决了当时国内网络状况不好、下载慢的痛点。 对了,大家每天使用的微信小程序也已经被腾讯申请了专利——“应用程序处理方法和装置(ZL201610908829.0)”。 小程序针对用户使用应用程序效率较低的问题,提供了一种全新的应用程序处理方法和装置——基于母应用程序运行,可以利用其公共组件快捷构建子应用程序页面。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16