012 Rust 網路程式設計,gRPC 演示示例

2021-10-06 02:08:45 字數 2889 閱讀 2535

本例子的功能為grpc客戶端向服務端寫入位置資訊和讀取位置資訊,演示環境為ubuntu。

安裝protobuf編譯器:

apt install protobuf-compiler
cargo new use_grpc --lib #記住這個名字use_grpc,因為在編寫**的時候要用
在use_grpc目錄下,建立foobar.proto檔案,編寫**如下:

syntax = "proto3";

package foobar;

service foobarservice

message cablocationrequest

message cablocationresponse

message getcabrequest

message getcabresponse

message cab

message location

extern crate protoc_rust_grpc;

fn main()

在檔案中新增如下內容:

[dependencies]

protobuf = "2"

grpc = "0.7.1"

grpc-protobuf = "0.7.1"

futures = "0.3.*"

tls-api = "0.3.*"

[build-dependencies]

protoc-rust-grpc = "0.7.1"

[[bin]]

name = "client"

test = false

[[bin]]

name = "server"

test = false

編寫src目錄下lib.rs,如下:

pub mod foobar;

pub mod foobar_grpc;

在src目錄下建立bin目錄,在bin目錄中建立server.rs,編寫如下:

use std::thread;

use use_grpc::foobar_grpc::*;//use_grpc為當前包的名字,如果名字不一樣需要修改

use use_grpc::foobar::*;//use_grpc為當前包的名字,如果名字不一樣需要修改

struct foobarserver;

impl foobarservice for foobarserver at {}, {}", req.message.get_name(), req.message.get_location().latitude, req.message.get_location().longitude);

r.set_accepted(true);

resp.finish(r)

}fn get_cabs(&self,

_o: grpc::serverhandlercontext,

_req: grpc::serverrequestsingle,

resp: grpc::serverresponseunarysink)

-> ::grpc::result<()>

}fn main()

}

在src/bin目錄下建立client.rs,編寫如下:

use use_grpc::foobar::*;//use_grpc為當前包的名字,如果名字不一樣需要修改

use use_grpc::foobar_grpc::*;//use_grpc為當前包的名字,如果名字不一樣需要修改

use futures::executor;

use grpc::clientstubext;

fn main() ", e),

ok((_, r, _)) => println!("", r),

}let mut nearby_req = getcabrequest::new();

let mut location = location::new();

location.latitude = 40.730610;

location.longitude = -73.935242;

nearby_req.set_location(location);

let nearby_resp = client

.get_cabs(grpc::requestoptions::new(), nearby_req)

.join_metadata_result();

let nearby_resp = executor::block_on(nearby_resp);

match nearby_resp ", e),

ok((_, cabs, _)) => println!("", cabs),

}}

cargo build//編譯
編譯完成後的目錄結構為:

use_grpc

|----- build.rs

|----- cargo.toml

|----- foobar.proto

|----- src

|----- lib.rs

|----- foobar_grpc.rs

|----- foobar.rs

|----- bin

|----- client.rs

|----- server.rs

其中foobar_grpc.rs和foobar.rs為編譯生成的檔案。

進入到target/debug目錄下。

linux 網路程式設計與 windows 網路程式設計

最近寫了乙個程式,涉及到在windows下執行的乙個程式到執行在linux下的伺服器取出資料。一開始還真沒有適應過來。下面說說我遇見的一些問題。1 windows下connect不成功。最開始也是不清楚 出錯,程式莫名其妙就在這個connect斷下,而且會花費很長的時間在connect這一句停留很長...

資料幀和網路編址

資料幀和網路編址 資料幀 1 ip報文頭部資訊用於指導網路裝置對報文進行路由和分片。2 同乙個網段 內的資料 通過鏈路層即可實現 單播,組播,廣播 而跨網段的資料 需要使用網路裝置的路由功能。3 分片是指資料報超過一定長度時,需要被劃分成不同 的片段使其能夠在網路中傳輸。4 ip報文頭部長度為20到...

TCP IP網路編學習筆記 三

可以設定tcp或udp通訊的輸入緩衝大小和輸出緩衝大小,但是最終大小並不一定是你所設定的大小 如果服務端先close,或者說先發出fin訊息表示分手,則服務端斷開連線後,在短時間內無法再次bind相同的埠,因為上一次繫結此埠的socket處於time wait過程中,還未被銷毀 不過此時客戶端是沒有...