Sha256: c7d3dda67a5cf0074527292a492ed3ab3c7402a334862a76701aa68d29d97600

Contents?: true

Size: 895 Bytes

Versions: 6

Compression:

Stored size: 895 Bytes

Contents

# Example from https://github.com/socketry/nio4r/blob/master/examples/echo_server.rb
# rewrite it in lightio for demonstrate

require 'lightio'

class EchoServer
  def initialize(host, port)
    @server = LightIO::TCPServer.new(host, port)
  end

  def run
    while (socket = @server.accept)
      _, port, host = socket.peeraddr
      puts "accept connection from #{host}:#{port}"

      # LightIO::Beam is lightweight executor, provide thread-like interface
      # just start new beam for per socket
      LightIO::Beam.new(socket) do |socket|
        loop do
          echo(socket)
        end
      end
    end
  end

  def echo(socket)
    data = socket.readpartial(4096)
    socket.write(data)
  rescue EOFError
    _, port, host = socket.peeraddr
    puts "*** #{host}:#{port} disconnected"
    socket.close
    raise
  end
end


EchoServer.new('localhost', 3000).run if __FILE__ == $0

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
lightio-0.3.2 examples/echo_server.rb
lightio-0.3.1 examples/echo_server.rb
lightio-0.3.0 examples/echo_server.rb
lightio-0.2.2 examples/echo_server.rb
lightio-0.2.1 examples/echo_server.rb
lightio-0.2.0 examples/echo_server.rb