本例子的功能為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過程中,還未被銷毀 不過此時客戶端是沒有...