WebチャットのpubsubをredisからGo言語製のRESPサーバーに変える

2021/02/14に公開

今回も次のqiita記事のWebチャットを触ってみます。
https://qiita.com/okmttdhr/items/a37563047904ac98f3ed
コードはここに公開されていています。

前回は、grpcwebを使って、envoyを除きました。今回はredisをGo言語製のRESP(REdis Serialization Protocol)サーバーbsm/redeoに置き換えてみます。
https://zenn.dev/nnabeyang/articles/28b7cc875afa0d22eec2

docker-compose.ymlredisサービスの部分をDockerfileRedisでビルドするように変更します。

docker-compose.yml
@@ -6,11 +6,12 @@ services:
       context: .
       dockerfile: DockerfileProto
     volumes:
-      - .:/proto
+      - .:/proto  
   redis:
-    image: "redis:latest"
-    volumes:
-      - "./redis/data:/data"
+    command: redeo-server-example
+    build:
+      context: .
+      dockerfile: DockerfileRedis
   server:
     command: ./scripts/server.sh
     build:

bsm/redeoにpubsubをサポートしたサンプルプログラムがあるので、それを使います。

DockerfileRedis
FROM golang:1.14.0-alpine3.11

RUN apk add --no-cache --update git
RUN go get github.com/bsm/redeo/cmd/redeo-server-example

redeo-server-exampleredisの使用するポートが違うので、修正します。

grpc-web-react-hooks/server/main.go
@@ -78,7 +78,7 @@ func (s *server) CreateMessage(ctx context.Context, r *pb.MessageRequest) (*pb.M
 
 func newRedisClient() *redis.Client {
        client := redis.NewClient(&redis.Options{
-               Addr:     "redis:6379",
+               Addr:     "redis:9736",
                Password: "",
                DB:       0,
        })

まとめ

今回はredisをGo製のRESPサーバーに置き換えてみました。bsm/redeoはおそらくWindows用にビルドも出来るので、Windows用に小さなアプリを作ったり、開発環境に使ったりできるかもしれません。

Discussion