gRPC入门系列之3-stream模式
December 3, 2023
gRPC的流模式有三种:
- 客户端流模式,客户端向服务端发送多条消息,发送完毕后等待服务端返回结果。这可用于数据上报等场景。
- 服务端流模式,客户端向服务端发送一条消息,服务端向客户端返回多条消息。这可用于服务端向客户端推送消息的场景,比如实时发送股票行情。
- 双向流模式,客户端和服务端都向对方发送多条消息。你可能会在聊天应用中使用到这种模式。
下面我们来实现相关代码。
...gRPC的流模式有三种:
下面我们来实现相关代码。
...默认情况下,hugo的url后缀是/,但是我们可以通过修改hugo的配置文件来达到修改url后缀的目的。 可以在配置中添加:
uglyURLs = true
官方文档地址:https://gohugo.io/content-management/urls/#appearance。
gRPC支持四种类型的方法,分别是:
其中最常见的是Unary模式(即一元模式),我们在本章节仅介绍Unary模式。
Unary模式,也可以称为“一问一答模式”,客户端发送一个请求给服务端,服务端返回一个响应,和一次普通的函数调用类似。 示意图如下:
...evans(https://github.com/ktr0731/evans)是一款用于调试gRPC接口的工具,利用它可以不用编写客户端代码就可以测试gRPC服务,非常方便开发调试。
基于上一篇文章中的gRPC接口,我们展示一下evans库的使用。
本机是macOS操作系统,安装方法如下:
...几个月前读了一本书《早起的奇迹》,讲述早起的种种好处,以及如何培养早起的习惯。个人觉得不错,就开始尝试着早起,到现在为止2个月了,起床时间从7点到现在的5点45分,感觉还不错。
虽然我的生活还没有发生奇迹,但是感觉确实还不错。最起码,坐地铁时不用排队了。不过,坐第一班地铁其实不一定就有座,第一班车有很多大爷大妈(似乎多是餐饮、卫生相关从业人员,都不容易呀)。
...最近在工作中遇到一个问题,客户端(c++)使用smtp方式发送邮件失败,报错如下:
The mail client submitted this message with bare line feeds, which cannot be sent via SMTP protocol DATA command and receiving system does not support BDAT
翻译中中文就是:
邮件客户端在提交此邮件时未换行,无法通过 SMTP 协议 DATA 命令发送,且接收系统不支持 BDAT
我们从这个提示中提取出几个关键词:换行、DATA、BDAT。
...功能描述: 使用go语言实现打包压缩功能。
实现这个功能不需要引入第三方库,直接使用go语言自带的archive/zip库即可。
下面直接给出实例代码:
package main
import (
"archive/zip"
"io"
"log"
"os"
)
func zipfiles(zipfilename string, files []string) error {
newfile, err := os.Create(zipfilename)
if err != nil {
return err
}
defer newfile.Close()
zwriter := zip.NewWriter(newfile)
defer zwriter.Close()
for _, file := range files {
temp, err := os.Open(file)
if err != nil {
return err
}
defer temp.Close()
info, err := temp.Stat()
if err != nil {
return err
}
header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
header.Name = file
header.Method = zip.Deflate
writer, err := zwriter.CreateHeader(header)
if err != nil {
return err
}
_, err = io.Copy(writer, temp)
if err != nil {
return err
}
}
return nil
}
func main() {
// 待压缩文件列表
files := []string{"./zipdemo/test1.txt", "./zipdemo/test2.txt"}
// 输出的压缩包文件名
output := "output.zip"
// 执行压缩
err := zipfiles(output, files)
if err != nil {
log.Fatal(err)
return
}
log.Println("success")
}
用着乞丐版的macbook,整天担心磁盘空间和内存不够用。今天突发奇想,想开发一个工具,可以实时显示电池电量、cpu使用率、内存使用率、磁盘使用率。
想干就干,利用ai+github,很快就找齐了相关的工具库。
...mysqldump是mysql自带的备份工具,可以用来备份mysql数据库。
# 备份bench数据库到demo1.sql文件
mysqldump bench > demo1.sql
# 备份bench和sakila数据库到demo2.sql文件
mysqldump --databases bench sakila > demo2.sql
mysqldump rclx user > demo3.sql
# 备份rclx数据库中的user和user_info表到demo4.sql文件
mysqldump rclx user user_info > demo4.sql
可以使用–result-file替换^符号,如:
...
最近在工作用遇到了一个问题,使用outlook邮箱以smtp方式发送邮件失败,报错如下:
504 5.7.4 Unrecognized authentication type [TYCP286CA0234.JPNP286.PROD.OUTLOOK.COM 2023-10-28T10:42:16.656Z 08DBD767E4655426]
仅从错误信息来看,是无法识别的身份验证类型。
使用其它邮件客户端登录、发送邮件正常,所以密码是没有问题的。
...