在使用Docker Compose部署Apollo Server应用时,可能会遇到WebSocket连接无法使用的问题。这个问题经常发生是因为WebSocket连接的端口未暴露(Expose)给Docker Compose。下面是如何解决这个问题的步骤:
version: '3'
services:
apollo-server:
expose:
- "4000"
...
version: '3'
services:
apollo-server:
expose:
- "4000"
ports:
- "4000:4000"
...
const server = new ApolloServer({
typeDefs,
resolvers,
subscriptions: {
path: '/subscriptions',
onConnect: (connectionParams, webSocket) => {
console.log('Client connected');
},
onDisconnect: (webSocket, context) => {
console.log('Client disconnected');
},
},
});
import { ApolloClient, InMemoryCache, HttpLink } from '@apollo/client';
import { WebSocketLink } from "@apollo/client/link/ws";
const wsLink = new WebSocketLink({
uri: `ws://localhost:4000/subscriptions`,
options: {
reconnect: true,
},
});
const httpLink = new HttpLink({ uri: '/graphql' });
const client = new ApolloClient({
link: wsLink.concat(httpLink),
cache: new InMemoryCache(),
});
以上是解决Apollo Server WebSocket Connection Docker Compose Expose问题的步骤。通过在Docker Compose文件中暴露WebSocket连接的端口并