今天正在找尋Golang相關的開發環境設定,找到了這二篇
本來想了解(之前雖然有碰過,但完全忘記了)golang的程式語法,但看著看著就被它的Dockerfile寫法混亂了。花了不少時間在了解它的Dockerfile到底為什麼那樣寫。
FROM --platform=${BUILDPLATFORM} golang:1.14.3-alpine AS build
WORKDIR /src
ENV CGO_ENABLED=0
COPY . .
ARG TARGETOS
ARG TARGETARCH
RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o /out/example .
FROM scratch AS bin-unix
COPY --from=build /out/example /
FROM bin-unix AS bin-linux
FROM bin-unix AS bin-darwin
FROM scratch AS bin-windows
COPY --from=build /out/example /example.exe
FROM bin-${TARGETOS} AS bin
而後就想說還是直接找網路連線的範例,但才看到gin的keyword就被拉到gqlgen,看了這段影片後,思路就有些偏離了。
Open Match的架構中,Game Fronted其實也就是網路上的一個server(service),要連接它的方式目前不外乎REST API或是GraphQL。想到很久以前有摸過GraphQL,那時是用Apollo寫Nodejs,如果這次能夠用golang寫server端,而c#寫client端也不錯。一想到這就傻傻地先決定讓Unity可以跑GraphQL。
以前在Unity端是用string的方式直post query過去,那時其實也還沒有GraphQL C# Client,但後來出現這個專案也不能用在手機上,所以就沒有特別理會它,但這次主要是用在Standalone上,或許可以來試試看它是否可以用在Unity裡。
從NuGet下載了一大堆相依的dll後,按照之前gRPC的經驗,全數都提出來直接放在Plugins目錄下。並且直接跑官方的範例
var graphQLClient = new GraphQLHttpClient("https://swapi.apis.guru/", new NewtonsoftJsonSerializer());
var personAndFilmsRequest = new GraphQLRequest
{
Query = @"
query PersonAndFilms($id: ID) {
person(id: $id) {
name
filmConnection {
films {
title
}
}
}
}",
OperationName = "PersonAndFilms",
Variables = new
{
id = "cGVvcGxlOjE="
}
};
但另外用UniRx包起Task,執行後順利的看到了
雖然沒有build exe檔,但在Unity Editor是可以成功跑起來的。本想趁勢進行golang端的撰寫,但看了一下golang的範例,感覺起來並不是可以像是C#端這快速就可以完成的。所以思考先找尋Graphql的開發協助工具。而官方的graphiql就是最先被找到的,而另一個工具Insomnia看起來相當的專業,附費的產品但是有免費的方案可用。如果接下來要進行用GraphQL串接前後端的溝通,勢必是不可少的。
另外,將過去的鐵人文章Think in GraphQL 系列找了出來,雖然時隔了二年,但之前有碰過的情況下,複習上希望可以很快速。
接下來要進行的就是利用Graphql的Mutation將要配對的資料交到Game Fronted,而Game Fronted一頭是對接Client,用Graphql的方式,而另一頭則是利用gRPC請求Open Match協助配對。流程上是愈加的清晰,但實作的困難度卻也大幅度的增加。不論是撰寫golang的部份,或是利用docker佈署到本地端進行測試,都蠻耗時的。