crap_server 0.0.2 → 0.0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
  - - ">="