4

次の宣言を使用して、サーバーのクラスを作成しました。

class myServer(socketserver.BaseRequestHandler):  
    def handle(self):  
        pass

そしてそれを始めました:

someServer = socketserver.UDPServer((HOST, PORT), myServer)  
someServer.serve_forever()

私の質問は、サーバーをシャットダウンするにはどうすればよいですか? シャットダウンメソッドを持つ BaseServer と呼ばれる(基本クラスの)基本クラスがあることを確認しました。someServerで呼び出すことができますsomeServer.shutdown()が、これはサーバー自体の外部からです。

4

3 に答える 3

1

ツイストを使用できます。これは、Python 用の最高のネットワーク ライブラリです。これは UDP サーバーの例です。

#!/usr/bin/env python

# Copyright (c) 2001-2009 Twisted Matrix Laboratories.
# See LICENSE for details.

from twisted.internet.protocol import DatagramProtocol
from twisted.internet import reactor

# Here's a UDP version of the simplest possible protocol
class EchoUDP(DatagramProtocol):
    def datagramReceived(self, datagram, address):
        self.transport.write(datagram, address)

def main():
    reactor.listenUDP(8000, EchoUDP())
    reactor.run()

if __name__ == '__main__':
    main()

self.transport.loseConnection()次に、準備ができたとき、または特定のイベントが発生したときに呼び出して、これを閉じることができます。

于 2011-03-03T09:19:16.360 に答える
1

スレッドを使用する。あるスレッドでサービスを提供し、タイムアウト後に別のスレッドを経由します。この実例を考えてみましょう。UDPServer 用に変更します

import threading
import time
import SimpleHTTPServer
import SocketServer

PORT = 8000
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)

def worker():

    # minimal web server.  serves files relative to the
    print "serving at port", PORT
    httpd.serve_forever()

def my_service():
    time.sleep(3)
    print "I am going down"
    httpd.shutdown()

h = threading.Thread(name='httpd', target=worker)
t = threading.Thread(name='timer', target=my_service)

h.start()
t.start()
于 2011-03-03T09:19:32.297 に答える
0

サーバー インスタンスはself.server、ハンドラ クラスと同じように使用できます。self.server.shutdown()したがって、メソッドを呼び出すことができますhandle

于 2011-03-03T15:23:37.403 に答える