Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
B
brpc
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
brpc
Commits
756b5437
Commit
756b5437
authored
Mar 07, 2018
by
gejun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rephrase some docs
parent
627672be
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
13 additions
and
12 deletions
+13
-12
README_cn.md
README_cn.md
+1
-1
http_service.md
docs/cn/http_service.md
+1
-1
new_protocol.md
docs/cn/new_protocol.md
+1
-1
overview.md
docs/cn/overview.md
+10
-9
No files found.
README_cn.md
View file @
756b5437
...
...
@@ -8,7 +8,7 @@
你可以使用它:
*
搭建
一个能在
**同
端口**
支持多协议的服务, 或访问各种服务
*
搭建
能在
**一个
端口**
支持多协议的服务, 或访问各种服务
*
restful http/https, h2/h2c (与
[
grpc
](
https://github.com/grpc/grpc
)
兼容, 即将开源). 使用brpc的http实现比
[
libcurl
](
https://curl.haxx.se/libcurl/
)
方便多了。
*
[
redis
](
docs/cn/redis_client.md
)
和
[
memcached
](
docs/cn/memcache_client.md
)
, 线程安全,比官方client更方便。
*
[
rtmp
](
https://github.com/brpc/brpc/blob/master/src/brpc/rtmp.h
)
/
[
flv
](
https://en.wikipedia.org/wiki/Flash_Video
)
/
[
hls
](
https://en.wikipedia.org/wiki/HTTP_Live_Streaming
)
, 可用于搭建
[
直播服务
](
docs/cn/live_streaming.md
)
.
...
...
docs/cn/http_service.md
View file @
756b5437
...
...
@@ -391,7 +391,7 @@ brpc server支持发送超大或无限长的body。方法如下:
这个错误在于
brpc
server
直接关闭了
http
连接而没有发送任何回复。
brpc
server
同
端口支持多种协议,当它无法解析某个
http
请求时无法说这个请求一定是
HTTP
。
server
会对一些基本可确认是
HTTP
的请求返回
HTTP
400
错误并关闭连接,但如果是
HTTP
method
错误
(
在
http
包开头
)
或严重的格式错误(可能由
HTTP
client
的
bug
导致),
server
仍会直接断开连接,导致
nginx
的
final
fail
。
brpc
server
一个
端口支持多种协议,当它无法解析某个
http
请求时无法说这个请求一定是
HTTP
。
server
会对一些基本可确认是
HTTP
的请求返回
HTTP
400
错误并关闭连接,但如果是
HTTP
method
错误
(
在
http
包开头
)
或严重的格式错误(可能由
HTTP
client
的
bug
导致),
server
仍会直接断开连接,导致
nginx
的
final
fail
。
解决方案
:
在使用
Nginx
转发流量时,通过指定$
HTTP_method
只放行允许的方法或者干脆设置
proxy_method
为指定方法。
...
...
docs/cn/new_protocol.md
View file @
756b5437
# server端多协议
brpc server
在同端口支持所有的协议,大部分时候这对部署和运维更加方便。由于不同协议的格式大相径庭,严格地来说,同
端口很难无二义地支持所有协议。出于解耦和可扩展性的考虑,也不太可能集中式地构建一个针对所有协议的分类器。我们的做法就是把协议归三类后逐个尝试:
brpc server
一个端口支持多种协议,大部分时候这对部署和运维更加方便。由于不同协议的格式大相径庭,严格地来说,一个
端口很难无二义地支持所有协议。出于解耦和可扩展性的考虑,也不太可能集中式地构建一个针对所有协议的分类器。我们的做法就是把协议归三类后逐个尝试:
-
第一类协议:标记或特殊字符在最前面,比如
[
baidu_std
](
baidu_std.md
)
,hulu_pbrpc的前4个字符分别是PRPC和HULU,解析代码只需要检查前4个字节就可以知道协议是否匹配,最先尝试这类协议。这些协议在同一个连接上也可以共存。
-
第二类协议:有较为复杂的语法,没有固定的协议标记或特殊字符,可能在解析一段输入后才能判断是否匹配,目前此类协议只有http。
...
...
docs/cn/overview.md
View file @
756b5437
...
...
@@ -6,10 +6,10 @@
-
数据以什么格式传输?不同机器间,网络间可能是不同的字节序,直接传输内存数据显然是不合适的;随着业务变化,数据字段往往要增加或删减,怎么兼容前后不同版本的格式?
-
一个TCP连接可以被多个请求复用以减少开销么?多个请求可以同时发往一个TCP连接么?
-
如何
访问一个包含很多机器的集群
?
-
连接断开时应该干什么?
万一server不发送回复怎么办?
*
...
-
如何
管理和访问很多机器
?
-
连接断开时应该干什么?
-
万一server不发送回复怎么办?
-
...
[
RPC
](
http://en.wikipedia.org/wiki/Remote_procedure_call
)
可以解决这些问题,它把网络交互类比为“client访问server上的函数”:client向server发送request后开始等待,直到server收到、处理、回复client后,client又再度恢复并根据response做出反应。
...
...
@@ -17,10 +17,11 @@
我们来看看上面的一些问题是如何解决的:
-
RPC需要序列化,
[
protobuf
](
https://github.com/google/protobuf
)
在这方面做的很好。用户填写protobuf::Message类型的request,RPC结束后,从同为protobuf::Message类型的response中取出结果。protobuf有较好的前后兼容性,方便业务调整字段。http广泛使用
[
json
](
http://www.json.org/
)
作为序列化方法。
-
用户不需要关心连接是如何建立的,但可以选择不同的
[
连接方式
](
client.md#连接方式
)
:短连接,连接池,单连接。
-
一个集群中的所有机器一般通过名字服务被发现,可基于
[
DNS
](
https://en.wikipedia.org/wiki/Domain_Name_System
)
,
[
ZooKeeper
](
https://zookeeper.apache.org/
)
,
[
etcd
](
https://github.com/coreos/etcd
)
等实现。在百度内,我们使用BNS (Baidu Naming Service)。brpc也提供
[
"list://"和"file://"
](
client.md#名字服务
)
。用户可以指定负载均衡算法,让RPC每次选出一台机器发送请求,包括: round-robin, randomized,
[
consistent-hashing
](
consistent_hashing.md
)(
murmurhash3
or md5)和
[
locality-aware
](
lalb.md
)
.
-
连接断开时按用户的配置进行重试。如果server没有在给定时间内返回response,那么client会返回超时错误。
-
数据需要序列化,
[
protobuf
](
https://github.com/google/protobuf
)
在这方面做的不错。用户填写protobuf::Message类型的request,RPC结束后,从同为protobuf::Message类型的response中取出结果。protobuf有较好的前后兼容性,方便业务调整字段。http广泛使用
[
json
](
http://www.json.org/
)
作为序列化方法。
-
用户无需关心连接如何建立,但可以选择不同的
[
连接方式
](
client.md#连接方式
)
:短连接,连接池,单连接。
-
大量机器一般通过名字服务被发现,可基于
[
DNS
](
https://en.wikipedia.org/wiki/Domain_Name_System
)
,
[
ZooKeeper
](
https://zookeeper.apache.org/
)
,
[
etcd
](
https://github.com/coreos/etcd
)
等实现。在百度内,我们使用BNS (Baidu Naming Service)。brpc也提供
[
"list://"和"file://"
](
client.md#名字服务
)
。用户可以指定负载均衡算法,让RPC每次选出一台机器发送请求,包括: round-robin, randomized,
[
consistent-hashing
](
consistent_hashing.md
)(
murmurhash3
or md5)和
[
locality-aware
](
lalb.md
)
.
-
连接断开时可以重试。
-
如果server没有在给定时间内回复,client会返回超时错误。
# 哪里可以使用RPC?
...
...
@@ -40,7 +41,7 @@ RPC不是万能的抽象,否则我们也不需要TCP/IP这一层了。但是
你可以使用它:
*
搭建
一个能在
**同
端口**
支持多协议的服务, 或访问各种服务
*
搭建
能在
**一个
端口**
支持多协议的服务, 或访问各种服务
*
restful http/https, h2/h2c (与
[
grpc
](
https://github.com/grpc/grpc
)
兼容, 即将开源). 使用brpc的http实现比
[
libcurl
](
https://curl.haxx.se/libcurl/
)
方便多了。
*
[
redis
](
redis_client.md
)
和
[
memcached
](
memcache_client.md
)
, 线程安全,比官方client更方便。
*
[
rtmp
](
https://github.com/brpc/brpc/blob/master/src/brpc/rtmp.h
)
/
[
flv
](
https://en.wikipedia.org/wiki/Flash_Video
)
/
[
hls
](
https://en.wikipedia.org/wiki/HTTP_Live_Streaming
)
, 可用于搭建
[
直播服务
](
live_streaming.md
)
.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment