Class: AlWorker::Tcp

Inherits:
Object
  • Object
show all
Defined in:
lib/al_worker_tcp.rb

Overview

TCPサーバ

Constant Summary collapse

@@servers =

Returns リスンサーバ.

Returns:

  • (Array<TCPServer>)

    リスンサーバ

[]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(address = "", port = 1944) ⇒ Tcp

constructor

Parameters:

  • address (String) (defaults to: "")

    リスンアドレス

  • port (Integer) (defaults to: 1944)

    リスンポート



49
50
51
52
53
54
55
# File 'lib/al_worker_tcp.rb', line 49

def initialize( address = "", port = 1944 )
  @address = address
  @port = port
  @mode_service = :thread
  @mode_param = :json
  @cb_prefix = "tcp"
end

Instance Attribute Details

#addressString

Returns リスンアドレス.

Returns:

  • (String)

    リスンアドレス



22
23
24
# File 'lib/al_worker_tcp.rb', line 22

def address
  @address
end

Returns 接続後のバナー表示.

Returns:

  • (String)

    接続後のバナー表示



40
41
42
# File 'lib/al_worker_tcp.rb', line 40

def banner
  @banner
end

#cb_prefixString

Returns コールバックメソッドのプレフィックス.

Returns:

  • (String)

    コールバックメソッドのプレフィックス



37
38
39
# File 'lib/al_worker_tcp.rb', line 37

def cb_prefix
  @cb_prefix
end

#mode_paramSymbol

Returns パラメータのデータ形式 :json :text.

Returns:

  • (Symbol)

    パラメータのデータ形式 :json :text



34
35
36
# File 'lib/al_worker_tcp.rb', line 34

def mode_param
  @mode_param
end

#mode_serviceSymbol

Returns 動作モード :thread :process.

Returns:

  • (Symbol)

    動作モード :thread :process



31
32
33
# File 'lib/al_worker_tcp.rb', line 31

def mode_service
  @mode_service
end

#portInteger

Returns リスンポート.

Returns:

  • (Integer)

    リスンポート



25
26
27
# File 'lib/al_worker_tcp.rb', line 25

def port
  @port
end

#serverTCPServer (readonly)

Returns リスンサーバ.

Returns:

  • (TCPServer)

    リスンサーバ



28
29
30
# File 'lib/al_worker_tcp.rb', line 28

def server
  @server
end

Instance Method Details

#closeObject

TCPサービス終了



110
111
112
# File 'lib/al_worker_tcp.rb', line 110

def close()
  @server.close()  if !@server.closed?()
end

#run(obj) ⇒ Object

Note:

実行開始

プロセスモードで動作時は、syncモードと同等の動作になる。

Parameters:

  • obj (AlWorker)

    ワーカオブジェクト



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/al_worker_tcp.rb', line 65

def run( obj )
  @me = obj
  @server = TCPServer.new( @address, @port )
  @@servers << @server

  case @mode_service
  when :process
    Thread.start {
      loop do
        sock = @server.accept
        pid = AlWorker.mutex_sync.synchronize { Process.fork() }

        # child
        if !pid
          @@servers.each {|server| server.close }
          _start_service( sock )
          exit!
        end

        # parent
        sock.close
        Process.detach( pid )
      end
    }


  when :thread
    Thread.start {
      loop do
        Thread.start( @server.accept ) { |sock|
          _start_service( sock )
        }
      end
    }


  else
    raise "Illegal mode_service"
  end
end