与 apollo-server 的 Websocket 连接为 connectionParams 返回乱码
Posted
技术标签:
【中文标题】与 apollo-server 的 Websocket 连接为 connectionParams 返回乱码【英文标题】:Websocket connection with apollo-server returns gibberish for connectionParams 【发布时间】:2018-07-17 07:12:13 【问题描述】:onConnect
应该接收客户端提供的connectionParams
,然后通过检查connectionParams
对象上的token
属性来验证令牌没有过期。在客户端,我发送这些参数如下:
const subOptions =
reconnect: true,
connectionParams: async () =>
let token = await get("token")
let ret =
token,
console.log("WEBSOCKET RETURN OBJECT", ret)
return ret
,
const subClient = new SubscriptionClient(subEndpoint, subOptions)
const subLink = new WebSocketLink(subClient)
在客户端:
“ON CONNECT”后打印的对象被打乱,显示如下。它如何以这种格式来自客户端?我该如何进一步调试?
在服务器上:
const ws = createServer(app)
ws.listen(PORT, () =>
console.log(`GraphQL Server is now running on http://localhost:$PORT`)
// Set up the WebSocket for handling GraphQL subscriptions
new SubscriptionServer(
execute,
subscribe,
schema,
onConnect: (connectionParams, webSocket) =>
let req =
console.log("ON CONNECT")
console.log(connectionParams)
return checkToken(connectionParams.token, function(payload)
return
user:
id: payload.userId,
exp: payload.exp,
iat: payload.iat,
,
)
,
,
server: ws,
path: "/subscriptions",
)
)
【问题讨论】:
【参考方案1】:暂时不能对 connectionParams 使用异步函数。
这是一个解决方法:
const wsLink = new WebSocketLink(
uri: wsUri,
options:
reconnect: true,
,
);
wsLink.subscriptionClient.use([
async applyMiddleware(options, next)
const token = await getLoginToken();
options.context = token ;
next();
,
]);
【讨论】:
以上是关于与 apollo-server 的 Websocket 连接为 connectionParams 返回乱码的主要内容,如果未能解决你的问题,请参考以下文章
本人对于netty框架的一些理解,怎么与网站上的websock建立连接