相关文章推荐
失恋的马铃薯  ·  将网页设置为允许 ...·  9 月前    · 
帅气的蚂蚁  ·  xcode - ...·  2 年前    · 

初略测试,仅供参考
client和server在同一台机器(2.2 GHz 六核Intel Core i7/ssd硬盘/16g内存 )

test 1

读写分离(启动两个task/goroutine,一个读一个写),客户端生成文件,客户端从文件中读取数据写入到服务端

在服务端计算速率(收到的bytes/second)

文件20g 每次发送数据4k

Type Rate
go Tcp 574m/s
rust Tcp / async_std 130m/s
rust Tcp / tokio 174m/s

文件20g 每次发送数据40k

Type Rate
go Tcp 1775m/s
rust Tcp / async_std 673m/s
rust Tcp / tokio 542m/s

test 2

读写分离(启动两个task/goroutine) ,客户端不生成文件,客户端直接发送数据到服务端

每次发送的包大小为4k/go buffer为默认4k/ rust buffer为默认8k

Type Rate
go Tcp 560~603m/s
go Tcp / bufio 500m/s
rust Tcp / async_std 1000 m/s
rust Tcp / async_std / BufWriter,BufReader 1280m/s
rust Tcp / tokio 900m/s
rust Tcp / tokio / BufWriter,BufReader 1150m/s

每次发送的包大小为40k/go buffer为默认4k/ rust buffer为默认8k

Type Rate
go Tcp 1192m/s
go Tcp / bufio 1500m/s
rust Tcp / async_std 1444m/s
rust Tcp / async_std/ BufWriter,BufReader 1500m/s
rust Tcp / tokio 934m/s
rust Tcp / tokio / BufWriter,BufReader 1180m/s

test 3

读写不分离(不启动task/goroutine) ,客户端不生成文件,客户端直接发送数据到服务端

每次发送的包大小为4k/go buffer为默认4k/ rust buffer为默认8k

Type Rate
go Tcp 190m/s
go Tcp /bufio 220m/s
rust Tcp / async_std 100m/s
rust Tcp / async_std / BufWriter,BufReader 110m/s
rust Tcp / tokio 129m/s
rust Tcp / tokio / BufWriter,BufReader 143m/s

每次发送的包大小为40k/go buffer为默认4k/ rust buffer为默认8k

Type Rate
go Tcp 2250m/s
go Tcp / bufio 2250m/s
rust Tcp / async_std 676m/s
rust Tcp / async_std / BufWriter,BufReader 780m/s
rust Tcp / tokio 733m/s
rust Tcp / tokio / BufWriter,BufReader 820m/s
初略测试,仅供参考test 1读写分离(启动两个task/goroutine),客户端生成文件,客户端从文件中读取数据写入到服务端在服务端计算速率(收到的bytes/second)文件20g 每次发送数据4kTypeRatego Tcp574m/srust Tcp(async_std)130m/srust Tcp(tokio)174m/s文件20g 每次发送数据40kTypeRatego Tcp1775m/srust
Rust - socket io客户端 用 Rust 编程语言编写的 socket .io客户端的实现。 此实现当前支持 socket .io协议的修订版5,因此支持engine.io协议的修订版4。 如果与此客户端有任何连接问题,请确保服务器至少使用engine.io协议的修订版4。 use rust _ socket io :: { Socket Builder, Payload, Socket }; use serde_json :: json; use std :: time :: Duration; // define a callback which is called when a payload is received // this callback gets the payload as well as an instance of the // socket to communicate
fn main() { let mut stream = Tcp Stream::connect("127.0.0.1:8080").expect("connect failed"); loop { let mut input = String::new(); let size = io::stdin().read_line(&mut input).expect
以下是最基础的UDP服务端与客户端源代码,实现客户端发送数据,服务器接收数据的功能。与 TCP 的区别在于客户端与服务端无需经过三次握手建立连接,可直接在相应端口收发数据。且内部没有流控,重发等机制进行可靠性保证,协议实现相对 TCP 简单。可简单认为是带有端口信息的IP数据报。 一、C++实现 【1】服务端源代码(Windows) #include "stdafx.h" #include<WinSock2.h> #include<iostream> using namespace std
我们在上文《 Rust 网络编程框架-Tokio进阶》介绍了async/await和锁的基本用法,并完成了一个Server端的DEMO代码。本文继续来探讨这个话题。 客户端代码DEMO 上文中依靠telnet来触发服务端代码的执行,本文我们将自己实现一个客户端。由于笔者也没有从之前比如GO、JAVA等语言的套路中完全走出来,我最初的实现是这样的 #[tokio::main]asyncfnmain() { letmutclient = client::connect("12...