-
Notifications
You must be signed in to change notification settings - Fork 133
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Way to use this without subscriptions-transport-ws? #219
Comments
I want to add to this and ask: Is there even any other transport for subscriptions?
I could imagine a transport using Firebase Cloud Messaging or even gRPC could be a viable alternative over websockets, but I don't find anybody doing anything other than subscriptions-transport-ws |
You can implement your own protocol. I implemented my own on top of socket.io for a project that was already using it. |
You didn't, by any chance, release that somehow? I'm really a bit afraid adding such a thing as a user-brew. |
check-out: https://github.com/dungeon-revealer/dungeon-revealer/blob/c3b257cd0ec95a8f05f884fb24d88d1a105b36d1/server/routes/graphql.ts#L13 (backend) and https://github.com/dungeon-revealer/dungeon-revealer/blob/c3b257cd0ec95a8f05f884fb24d88d1a105b36d1/src/relay-environment.ts#L15-L77 (frontend) no guarantees I just hacked this together yesterday, still need to do some more testing and understanding how to terminate AsyncIterators |
Check this https://github.com/enisdenjo/graphql-transport-ws Copy here: Server (GraphQL.js GraphQLSchema object way) import { execute, subscribe, GraphQLObjectType, GraphQLSchema, GraphQLString } from 'graphql';
import { createServer } from 'graphql-transport-ws';
import { PubSub } from 'graphql-subscriptions';
const pubsub = new PubSub();
const subscription = new GraphQLObjectType({
name: 'Subscription',
fields: {
greeting: {
type: GraphQLString,
resolve: (source) => {
if (source instanceof Error) {
throw source;
}
return source.greeting;
},
subscribe: () => {
return pubsub.asyncIterator('greeting');
},
},
},
});
const schema = new GraphQLSchema({
query,
subscription,
});
setInterval(() => {
pubsub.publish('greeting', {
greeting: 'Bonjour',
});
}, 1000);
createServer(
{
schema,
execute,
subscribe,
},
{
server,
path: '/graphql',
}
); Server (GraphQL Schema Definition Language) import { createServer } from 'graphql-transport-ws';
import { buildSchema } from 'graphql';
const schema = buildSchema(`
type Subscription {
greeting: String
}
`);
const roots = {
subscription: {
greeting: async function* sayHiIn5Languages() {
for (const hi of ['Hi', 'Bonjour', 'Hola', 'Ciao', 'Zdravo']) {
yield { greeting: hi };
}
},
},
};
createServer(
{
schema,
execute,
subscribe,
roots,
},
{
server, // Your HTTP server
path: '/graphql',
}
); Client const client = createClient({
url: 'wss://localhost:5000/graphql',
});
client.subscribe(
{
query: 'subscription { greeting }',
},
{
next: (data) => {
console.log('data', data);
},
error: (error) => {
console.error('error', error);
},
complete: () => {
console.log('no more greetings');
},
}
); |
The package
subscriptions-transport-ws
seems to be really buggy. Is there a way to use this without that package?The text was updated successfully, but these errors were encountered: