crap_server 0.0.2 → 0.0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eedef645e51d16d796efdd9893f69809adce20d0
4
- data.tar.gz: e220bbd8a3878f29037216942fb3cc00ba5d4e60
3
+ metadata.gz: fec671da6d4ad0911a4471409620d7fb6de1d25b
4
+ data.tar.gz: 18b77248eb31818771cf374ba71b6bac2d6db5c6
5
5
  SHA512:
6
- metadata.gz: f2e78629c99e7564e0352f3a754623b7108e84ed9f695ce7f5f12e9f1c0ab1829830223f2f16aa43b343ed0423e8eb37f1f3e046a5939ba5bf48ffef88630163
7
- data.tar.gz: 167fcab8bc1047971cee75ad00de1e0297b245e455de3210ce7a3dce0e8b032df6a0e94143a9ee49f1d5bd8a9e2b57418ab765164838228970e51edc7aa1336b
6
+ metadata.gz: 0468c1a3e10ec024543ad56a5d8a948a0b6313e0d58e7a9e780d099787ccf1cbd33e10f771cf31b0c0fd08539df033cb837186556ed8d687d87fd3072ce37af7
7
+ data.tar.gz: 12fd50db239ae0fdc63ff31086baaeece7cfbb96798cc1c6b8b488069fc8a120a790b8eaf47b8d96977da42941117ffa9db04ae7487eaaeca23e9b5a9f5bb86e
data/README.md CHANGED
@@ -1,11 +1,12 @@
1
1
  # CrapServer
2
+ [![Code Climate](https://codeclimate.com/github/anga/crap_server/badges/gpa.svg)](https://codeclimate.com/github/anga/crap_server)
2
3
 
3
- Really thin a non intuitive ruby server and framework. Made to be fast and ready for really heavy servers (not only http server).
4
+ Really thin and non intuitive ruby server and framework. Made to be fast and ready for really heavy servers (not only http server).
4
5
 
5
6
  # Another one?
6
7
 
7
8
  Yes. Why? because 2 main reasons. First, this is not a HTTP Web server, this is a generic server that can be used for any kind of TCP Socket server.
8
- Second and most important, because if funny :)
9
+ Second and most important, because is funny :)
9
10
 
10
11
  ## Installation
11
12
 
@@ -49,11 +50,11 @@ ruby my_app.rb
49
50
 
50
51
  # Production ready?
51
52
 
52
- No. At the moment is only a thin server that abstract you from TCP sockets works.
53
+ No. At the moment it's only a thin server that abstract you from TCP sockets works.
53
54
 
54
55
  ## Contributing
55
56
 
56
- 1. Fork it ( https://github.com/[my-github-username]/crap_server/fork )
57
+ 1. Fork it ( https://github.com/anga/crap_server/fork )
57
58
  2. Create your feature branch (`git checkout -b my-new-feature`)
58
59
  3. Commit your changes (`git commit -am 'Add some feature'`)
59
60
  4. Push to the branch (`git push origin my-new-feature`)
data/crap_server.gemspec CHANGED
@@ -4,21 +4,22 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'crap_server/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "crap_server"
7
+ spec.name = 'crap_server'
8
8
  spec.version = CrapServer::VERSION
9
- spec.authors = ["Andres Joser Borek"]
10
- spec.email = ["andres.b.dev@gmail.com"]
9
+ spec.authors = ['Andres Joser Borek']
10
+ spec.email = ['andres.b.dev@gmail.com']
11
11
  spec.summary = %q{Really thin a non intuitive ruby server and framework.}
12
- spec.description = %q{Really thin a non intuitive ruby server and framework. Made to be fast and ready for really heavy servers (not only http server).}
13
- spec.homepage = ""
14
- spec.license = "MIT"
12
+ spec.description = %q{Really thin and non intuitive ruby server and framework. Made to be fast and ready for really heavy servers (not only http server).}
13
+ spec.homepage = 'https://rubygems.org/gems/crap_server'
14
+ spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
19
+ spec.require_paths = ['lib']
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.6"
21
+ spec.required_ruby_version = '>= 1.9.2'
22
+ spec.add_development_dependency 'bundler', '~> 1.6'
22
23
  # celluloid is for future use. Right now is not used
23
24
  # spec.add_dependency "celluloid", '~> 0.15.2'
24
25
  end
@@ -25,31 +25,39 @@ module CrapServer
25
25
  # Main method. This setup all the connections and make the logic of the app
26
26
  def run!(&block)
27
27
 
28
- # Bup the maximum opened file to the maximum allowed by the system
29
- Process.setrlimit(:NOFILE, Process.getrlimit(:NOFILE)[1])
28
+ begin
29
+ # Bup the maximum opened file to the maximum allowed by the system
30
+ Process.setrlimit(:NOFILE, Process.getrlimit(:NOFILE)[1])
30
31
 
31
- # Start IPv4 and IPv6 connection for the current port
32
- open_connections
32
+ # Start IPv4 and IPv6 connection for the current port
33
+ open_connections
33
34
 
34
35
 
35
- # Some log info to the user :)
36
- logger.info 'Initializing Crap Server'
37
- logger.info "Listening 0.0.0.0:#{config.port}"
38
- logger.debug "Maximum allowed waiting connections: #{Socket::SOMAXCONN}"
39
- logger.debug "Maximum number of allowed connections: #{Process.getrlimit(:NOFILE)[1]}" # Same as maximum of opened files
40
- logger.info ''
36
+ # Some log info to the user :)
37
+ logger.info 'Initializing Crap Server'
38
+ logger.info "Listening 0.0.0.0:#{config.port}"
39
+ logger.debug "Maximum allowed waiting connections: #{Socket::SOMAXCONN}"
40
+ logger.debug "Maximum number of allowed connections: #{Process.getrlimit(:NOFILE)[1]}" # Same as maximum of opened files
41
+ logger.info ''
41
42
 
42
- # The main loop. Listening IPv4 and IPv6 connections
43
- Socket.accept_loop([socket_ipv4, socket_ipv6]) do |remote_socket, address_info|
44
- connection_loop(remote_socket, address_info, &block)
45
- end
43
+ # The main loop. Listening IPv4 and IPv6 connections
44
+ Socket.accept_loop([socket_ipv4, socket_ipv6]) do |remote_socket, address_info|
45
+ connection_loop(remote_socket, address_info, &block)
46
+ end
47
+
48
+ close_connections
46
49
 
47
- close_connections
48
- # If any kind of error happens, we MUST close the sockets
49
- rescue => e
50
- close_connections
50
+ # If any kind of error happens, we MUST close the sockets
51
+ rescue => e
52
+ logger.error "Error: #{e.message}"
53
+ e.backtrace.each do |line|
54
+ logger.error line
55
+ end
56
+ close_connections
51
57
 
52
- raise e
58
+ rescue Interrupt
59
+ close_connections
60
+ end
53
61
  end
54
62
 
55
63
  protected
@@ -94,6 +102,8 @@ module CrapServer
94
102
 
95
103
  # Close all the sockets.
96
104
  def close_connections
105
+ logger.debug 'Closing all connections.'
106
+ logger.debug 'Bye!'
97
107
  # If any kind of error happens, we MUST close the sockets
98
108
  if socket_ipv4
99
109
  # Shuts down communication on all copies of the connection.
@@ -144,8 +154,6 @@ module CrapServer
144
154
  raise ConnectionError.new "Unable to bind #{config.port} port."
145
155
  end
146
156
 
147
- puts "config: #{config.manual_read}"
148
-
149
157
  socket_ipv4.listen(config.max_pending_connections)
150
158
  # Tell to the Kernel that is ok to rebind the port if is in TIME_WAIT state (after close the connection
151
159
  # and the Kernel wait for client acknowledgement)
@@ -32,7 +32,7 @@ module CrapServer
32
32
  @manual_read = false
33
33
  @read_buffer_size = 1024*16 # 16K for read buffer
34
34
  @max_pending_connections = Socket::SOMAXCONN
35
- @method = :partial
35
+ @method = :non_blocking
36
36
  @auto_close_connection = true
37
37
  @log_file = STDOUT
38
38
  @log_level = Logger::DEBUG
@@ -40,13 +40,18 @@ module CrapServer
40
40
  protected
41
41
  # Read the data from the socket
42
42
  def read_data
43
- # Read the data from the socket
44
- if @method == :normal
45
- @socket.read(config.read_buffer_size)
46
- elsif @method == :partial
47
- @socket.readpartial(config.read_buffer_size)
48
- elsif @method == :non_blocking
49
- @socket.read_nonblock(config.read_buffer_size)
43
+ begin
44
+ # Read the data from the socket
45
+ if @method == :normal
46
+ @socket.read(config.read_buffer_size)
47
+ elsif @method == :partial
48
+ @socket.readpartial(config.read_buffer_size)
49
+ elsif @method == :non_blocking
50
+ @socket.read_nonblock(config.read_buffer_size)
51
+ end
52
+ rescue Errno::EAGAIN
53
+ IO.select([connection])
54
+ retry
50
55
  end
51
56
  end
52
57
  end
@@ -1,3 +1,3 @@
1
1
  module CrapServer
2
- VERSION = "0.0.2"
2
+ VERSION = '0.0.2.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crap_server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andres Joser Borek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-04 00:00:00.000000000 Z
11
+ date: 2014-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,7 +24,7 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.6'
27
- description: Really thin a non intuitive ruby server and framework. Made to be fast
27
+ description: Really thin and non intuitive ruby server and framework. Made to be fast
28
28
  and ready for really heavy servers (not only http server).
29
29
  email:
30
30
  - andres.b.dev@gmail.com
@@ -44,7 +44,7 @@ files:
44
44
  - lib/crap_server/connection_instance.rb
45
45
  - lib/crap_server/helpers/socket_reader.rb
46
46
  - lib/crap_server/version.rb
47
- homepage: ''
47
+ homepage: https://rubygems.org/gems/crap_server
48
48
  licenses:
49
49
  - MIT
50
50
  metadata: {}
@@ -56,7 +56,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: '0'
59
+ version: 1.9.2
60
60
  required_rubygems_version: !ruby/object:Gem::Requirement
61
61
  requirements:
62
62
  - - ">="