博客

gRPC入门系列之3-stream模式

December 3, 2023
Grpc, 微服务
Grpc

gRPC的流模式有三种:

  • 客户端流模式,客户端向服务端发送多条消息,发送完毕后等待服务端返回结果。这可用于数据上报等场景。
  • 服务端流模式,客户端向服务端发送一条消息,服务端向客户端返回多条消息。这可用于服务端向客户端推送消息的场景,比如实时发送股票行情。
  • 双向流模式,客户端和服务端都向对方发送多条消息。你可能会在聊天应用中使用到这种模式。

下面我们来实现相关代码。

...

hugo的使用

December 3, 2023
其他
工具, Hugo

修改hugo的url后缀 #

默认情况下,hugo的url后缀是/,但是我们可以通过修改hugo的配置文件来达到修改url后缀的目的。 可以在配置中添加:

uglyURLs = true

官方文档地址:https://gohugo.io/content-management/urls/#appearance。

gRPC入门系列之1-Unary模式

December 2, 2023
Grpc, 微服务
Grpc

gRPC支持四种类型的方法,分别是:

  • Unary模式
  • 客户端流模式
  • 服务端流模式
  • 双向流模式

其中最常见的是Unary模式(即一元模式),我们在本章节仅介绍Unary模式。

Unary模式,也可以称为“一问一答模式”,客户端发送一个请求给服务端,服务端返回一个响应,和一次普通的函数调用类似。 示意图如下:

...

谈谈早起与习惯的培养

December 2, 2023
其他
习惯

几个月前读了一本书《早起的奇迹》,讲述早起的种种好处,以及如何培养早起的习惯。个人觉得不错,就开始尝试着早起,到现在为止2个月了,起床时间从7点到现在的5点45分,感觉还不错。

虽然我的生活还没有发生奇迹,但是感觉确实还不错。最起码,坐地铁时不用排队了。不过,坐第一班地铁其实不一定就有座,第一班车有很多大爷大妈(似乎多是餐饮、卫生相关从业人员,都不容易呀)。

...

CRLF的缺失导致smtp方式发送邮件失败

November 5, 2023
后端开发
Smtp, 邮件发送

问题描述 #

最近在工作中遇到一个问题,客户端(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。

...

常用功能-打包压缩

November 5, 2023
后端开发, Golang
Golang

功能描述: 使用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")
}

使用mysqldump备份数据

November 5, 2023
数据库
Mysqldump, Mysql

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方式发送邮件失败的经历

October 28, 2023
后端开发
Smtp, 邮件发送

最近在工作用遇到了一个问题,使用outlook邮箱以smtp方式发送邮件失败,报错如下:

504 5.7.4 Unrecognized authentication type [TYCP286CA0234.JPNP286.PROD.OUTLOOK.COM 2023-10-28T10:42:16.656Z 08DBD767E4655426]

仅从错误信息来看,是无法识别的身份验证类型

使用其它邮件客户端登录、发送邮件正常,所以密码是没有问题的。

...