/** * Bind a new TCP server to "loopback" on port {@literal 12012}. By default the default server implementation is * scanned * from the classpath on Class init. Support for Netty first and ZeroMQ then is provided as long as the relevant * library dependencies are on the classpath. * <p> * To reply data on the active connection, {@link ReactorChannel#writeWith} can subscribe to any passed {@link org.reactivestreams.Publisher}. * <p> * Note that {@link reactor.rx.Stream#getCapacity} will be used to switch on/off a channel in auto-read / flush on * write mode. * If the capacity is Long.MAX_Value, write on flush and auto read will apply. Otherwise, data will be flushed every * capacity batch size and read will pause when capacity number of elements have been dispatched. * <p> * Emitted channels will run on the same thread they have beem receiving IO events. * Apart from dispatching the write, it is possible to use {@link reactor.rx.Stream#dispatchOn} to process requests * asynchronously. * <p> * By default the type of emitted data or received data is {@link reactor.io.buffer.Buffer} * * @return a new Stream of ChannelStream, typically a peer of connections. */ public static TcpServer<Buffer, Buffer> tcpServer() { return tcpServer(DEFAULT_BIND_ADDRESS); }
return tcpServer(bindAddress, DEFAULT_PORT);
return tcpServer(DEFAULT_BIND_ADDRESS, port);
return tcpServer(new Function<Spec.TcpServerSpec<Buffer, Buffer>, Spec.TcpServerSpec<Buffer, Buffer>>() { @Override public Spec.TcpServerSpec<Buffer, Buffer> apply(Spec.TcpServerSpec<Buffer, Buffer> serverSpec) {
Function<? super Spec.TcpServerSpec<IN, OUT>, ? extends Spec.TcpServerSpec<IN, OUT>> configuringFunction ) { return tcpServer(DEFAULT_TCP_SERVER_TYPE, configuringFunction);
public Promise<ChannelStream<T, T>> createServer(final String addrs, final int socketType) { Assert.isTrue(!shutdown, "This ZeroMQ instance has been shut down"); final TcpServer<T, T> server = NetStreams.tcpServer(ZeroMQTcpServer.class, new NetStreams.TcpServerFactory<T, T>() { @Override public Spec.TcpServerSpec<T, T> apply(Spec.TcpServerSpec<T, T> spec) { return spec .env(env).dispatcher(dispatcher).codec(codec) .options(new ZeroMQServerSocketOptions() .context(zmqCtx) .listenAddresses(addrs) .socketType(socketType)); } }); final Promise<ChannelStream<T, T>> promise = Promises.ready(env, dispatcher); server.start(new ReactorChannelHandler<T, T, ChannelStream<T, T>>() { @Override public Publisher<Void> apply(ChannelStream<T, T> ttChannelStream) { promise.onNext(ttChannelStream); return Streams.never(); } }); synchronized (peers) { peers.add(server); } return promise; }