NestJS 環(huán)境搭建
這里我使用的nrwl來(lái)初始化nest項(xiàng)目, nest cli 之類同理可以初始化項(xiàng)目出來(lái)
NestJS 初始化一個(gè)微服務(wù)
nestjs提供connectMicroService 和createMicroSerivice.
兩者的不同點(diǎn)是在connectMicroService 是以一個(gè)socket主服務(wù)的額外服務(wù)存在.
由于nestjs支持多種服務(wù)化運(yùn)行, 如http grpc 等等, socket主服務(wù)大部門可能大部份以http形式啟動(dòng)運(yùn)行.
createMicroSerivice 是主服務(wù)就是微服務(wù), 初入nestjs可以看下兩個(gè)函數(shù)的api, 它們是非常不同的.
現(xiàn)在做測(cè)試, 用connectMicroService ,
app = createApplication();
app.connectMicroService({
transport: Transport.TCP,
options: {
port: 5557
}
})
好, 起了一個(gè)5557的tcp微服務(wù).
默認(rèn)的TCP服務(wù)
TCP的TCP服務(wù)其實(shí)是一個(gè)自定義的帶長(zhǎng)度的JSON數(shù)據(jù)SOCKET
傳輸格式為 len(int)#(char)json_str(string) 中間的#是固定的.
大致形式為 13#{"foo":"bar"} 這里json格式是任意寫的, 實(shí)際上json有固定的字段.
{"partern": any, "data":any, "id"?:number } partern是一個(gè)可以序列化的object或字符串, 用于生成token, 生成token時(shí)key會(huì)做遞歸排序. id是可選的, 當(dāng)id傳了時(shí), tcp服務(wù)端會(huì)返回一個(gè)銷毀的消息
他大致像{"partern": "destroy", , "id":20 }
結(jié)論
所有的微服務(wù)需要映射到 類似 {"partern": "destroy", }的數(shù)據(jù)結(jié)構(gòu), 當(dāng)然自己寫類不用 partern 也是可行的, 自已的Controller注解不要繼承于ParternMessage即可.
其他基于TCP的二進(jìn)制數(shù)據(jù)轉(zhuǎn)到對(duì)像時(shí), 這個(gè)對(duì)像最好繼承{"partern": any, "data":any, "id"?:number }, key值存在即可, partern 還要當(dāng)token用, 用于Controller映射到請(qǐng)求