{"library":"rsocket-tcp-server","title":"RSocket TCP Server","description":"The `rsocket-tcp-server` package provides a TCP server implementation for the RSocket protocol within the `rsocket-js` monorepo. It enables applications to establish and manage RSocket connections over TCP, facilitating reactive, multiplexed, and high-performance communication. Currently, this specific package is at version `0.0.29-alpha.0`, reflecting its alpha development status. The broader `rsocket-js` project, which includes core RSocket functionalities, RxJS adapters, and GraphQL links, is also undergoing significant changes with `1.0.0-alpha.x` versions, including a rewrite to TypeScript from Flow. The project maintains an active development cadence, with frequent alpha releases across its constituent packages. Its primary differentiation lies in offering a native JavaScript/TypeScript implementation of the RSocket protocol, a critical component for building responsive microservices and real-time data streaming architectures in Node.js environments.","language":"javascript","status":"active","last_verified":"Sun Apr 19","install":{"commands":["npm install rsocket-tcp-server"],"cli":null},"imports":["import { RSocketServer } from 'rsocket-core';","import { TcpServerTransport } from 'rsocket-tcp-server';","import { Flowable, Single, Payload } from 'rsocket-flowable';"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import { RSocketServer, Payload } from 'rsocket-core';\nimport { TcpServerTransport } from 'rsocket-tcp-server';\nimport { Flowable, Single } from 'rsocket-flowable';\n\nconst port = 9000;\n\n// Define a request handler for the RSocket server\nconst getRequestHandler = (\n  socket: any, // RSocket instance representing the client connection\n  setupPayload: Payload // Initial payload sent during connection setup\n) => {\n  console.log('Client connected:', setupPayload.data?.toString());\n\n  return {\n    requestResponse: (payload: Payload): Single<Payload> => {\n      console.log('Received Request-Response:', payload.data?.toString());\n      return new Single(subscriber => {\n        if (payload.data) {\n          const responseData = `Echo: ${payload.data.toString()}`;\n          subscriber.onComplete({\n            data: Buffer.from(responseData),\n            metadata: payload.metadata,\n          });\n        } else {\n          subscriber.onError(new Error('No data in payload'));\n        }\n      });\n    },\n\n    requestStream: (payload: Payload): Flowable<Payload> => {\n      console.log('Received Request-Stream:', payload.data?.toString());\n      return new Flowable(subscriber => {\n        let count = 0;\n        const interval = setInterval(() => {\n          if (count < 5) {\n            subscriber.onNext({\n              data: Buffer.from(`Stream ${count++}: ${payload.data?.toString()}`),\n              metadata: payload.metadata,\n            });\n          } else {\n            clearInterval(interval);\n            subscriber.onComplete();\n          }\n        }, 1000);\n\n        return {\n          cancel: () => {\n            console.log('Stream cancelled by client');\n            clearInterval(interval);\n          },\n          onComplete: () => {\n            console.log('Stream completed by client');\n            clearInterval(interval);\n          }\n        };\n      });\n    },\n\n    // Add other interaction models like fireAndForget, requestChannel as needed\n  };\n};\n\nasync function startServer() {\n  const server = new RSocketServer({\n    transport: new TcpServerTransport({ address: '127.0.0.1', port }),\n    getRequestHandler: getRequestHandler,\n    // Setup common serializers for JSON if needed\n    // serializers: JsonSerializers,\n    // For 0.x versions, ensure mime types are compatible\n    setup: {\n      dataMimeType: 'text/plain',\n      metadataMimeType: 'text/plain',\n      keepAlive: 60000, // 60 seconds\n      lifetime: 180000, // 3 minutes\n    },\n  });\n\n  try {\n    await server.bind();\n    console.log(`RSocket TCP server listening on port ${port}`);\n  } catch (error) {\n    console.error('Failed to start RSocket TCP server:', error);\n    process.exit(1);\n  }\n}\n\nstartServer();\n\n// Example: Graceful shutdown\nprocess.on('SIGINT', async () => {\n  console.log('Shutting down server...');\n  // Await server.close() if available in your RSocketServer version\n  process.exit(0);\n});\n","lang":"typescript","description":"This quickstart demonstrates setting up an RSocket TCP server that listens on a specified port and handles basic request-response and request-stream interactions, echoing received data.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":null}