day40、ファイルディスクリプタ、データベースの概念

                                                                                   epoll、データベースの概念

多重選択、話す前に、それはデータが大きすぎるという欠点を持っていますが、(1024台のクライアントを超えて)SELECT処理します

唯一の1024台の同時クライアントを処理選択し、

経験のリソースのボトルネックをマルチスレッド、それに高い並行性を解決するための最も効果的な方法は何ですか

Linuxは、対応する実装することなく、他のプラットフォームへの注意を払って、この多重IOモデルのepollを提供します

だから、ファイルディスクリプタにLinuxでのみ使用可能です


複数のクライアント接続モードサービス側の処理を選択します。

  1、それぞれが読み取りを終了し、書き込みをした後、我々はプロセスを追加し、除去プロセスを含め、使用パンチを繰り返す必要があり、デフォルトのプロセスが待機キューに追加し、生活のプロセスをブロックされますが、待ちキューおよび更新操作頻度が低いです。

  2、SELECTは、ソケットはあなたが横断する必要があるデータとなっている過程で学ぶことができません

EPOLリットルの解決すべき問題は、

    1.キューの頻繁な操作を避けます

    2.すべてのソケットをトラバースしないでください

 

  だから、最初の質問のepoll、プログラムを採用し、それは2つの操作を分割するために、ブロッキングプロセスをキューおよびメンテナンスをお待ちしております

   ファイルディスクリプタに登録して、待機中のキューを維持するための関数の登録を解除

  登録プロセスは、プロセスが待ちキューから削除された登録解除待ちキューに追加され、そのような行動は、キューを待っているすべての操作上の問題を再治療する必要性を回避します

頻繁に操作キューを避けるために追加および削除する私たち自身の待ち行列を制御するために、これらの二つの機能を使用します

次のように、関連するコードであります

輸入ソケット、SELECT 
サーバー = socket.socket()
server.bind((" 127.0.0.1 "、1688年))
server.listen( 5 

#は、epollをイベントオブジェクトを作成し、フォローアップをするイベントを監視するために、 
ファイルディスクリプタ= select.epoll ()
登録サーバは、読み取りイベント収集を待つfdがリッスン 
epoll.register(server.fileno()、select.EPOLLIN)   このサーバソケットに注力する必要が読み込み可能なイベント

#は、イベントを待つ
間は真:
     のために私たちの靴下、イベントのepoll。世論調査():
     パス
第二の問題は、そう横断する必要があるデータを知ることであるソケットを選択することができないプロセスであります

EPOLは、この問題を解決するためのカーネルに準備リストを維持するために、

1.オブジェクトファイルディスクリプタを作成し、ファイルディスクリプタは、ファイル、ファイルシステム管理に対応します

2.場合は、実行レジスタ、ソケットのファイルディスクリプタの待ちキューにオブジェクトを追加

3.データが到着すると、CPUはソケットにデータをコピーし、割り込みプログラムを実行

epoll 4.、割り込みプログラムはレディソケットオブジェクトを渡して、次のepollオブジェクトのコールバック関数を実行されます

リストに追加する準備ができ5.ソケット、

6.ウェイクのepollキュー待機中のプロセス、

ウェイクアッププロセスの後、レディリストによる、ソケットを通過するので、必要はありません、あなたは準備ができてリストを直接扱うことができます

ソケットの数千の最大レベルを維持しながら、これら二つの問題を解決するために、並行処理の量が大幅に改善されています

epoll相関関数

インポート選択インポートモジュール選択

のepoll = select.epollは()がepollを作成するオブジェクトを

監視するために、登録されたファイルハンドルやイベントepoll.register(ファイルハンドル、イベントタイプ)

:イベントの種類

  select.EPOLLIN読めるイベント

  select.EPOLLOUTは、イベントが書くことができます

  選択を.EPOLLERRエラーイベント

  select.EPOLLHUPクライアントの切断イベント

epoll.unregister(ファイルハンドル)は、ファイルハンドル破壊された

ファイルハンドルの変更がユーザプロセスに積極的報告のリストの形態であるときepoll.poll(タイムアウト)、タイムアウト

                     タイムアウトしますデフォルトは -1 として指定された場合、ファイルハンドルは、変更されるまで、すなわち、待機、

                     変化なしの場合、現在のファイルハンドル戻りヌルの1秒ごと変化そうファイルディスクリプタレポート

epoll.fileno()は、制御ファイルを返すがファイルディスクリプタ記載されています文字(リターンのepoll制御ファイルディスクリプタ)

イベントタイプのイベント記述子のepoll.modfiy(fineno、イベント)finenoファイル記述子は、対応するアクションイベントを変更することです

指定されたファイルディスクリプタepoll.fromfd(FILENO)から1をepollオブジェクトの作成

epoll.close()コントロールオブジェクトディスクリプタファイルディスクリプタをクローズします
コードの表示

クライアント:

#のコーディング:UTF 8つの
#のクライアント
#はクライアントソケットを作成し、オブジェクト
のインポートソケット
ClientSocket = socket.socket(はsocket.AF_INET、socket.SOCK_STREAM)
タプルサーバーのIPアドレスとポート番号 
SERVER_ADDRESS =(' 127.0.0.1を'、 1688 #のIPアドレスとポート番号を指定したクライアント接続
clientsocket.connect(SERVER_ADDRESS)

しばらく真:
     入力データの 
    データ= raw_input(' 入力してください:' IFデータ== " Q " BREAK 
    IF  れていないデータ:
      続行
    #のクライアントがデータ送信 
    clientsocket.send(data.encodeを(" UTF-8。" ))
    クライアントは、データ受信 
    SERVER_DATA = clientsocket.recv(1024 印刷' クライアントが受信したデータを:' 、SERVER_DATA)
閉じますクライアントソケット 
clientsocket.close()
コードの表示

サーバー:

#のコード:UTF-8 
インポートソケット、選択

サーバ = socket.socket()
server.bind((" 127.0.0.1 "、1688 ))
server.listen( 5 

のMSG = [] 


fd_socket = {server.fileno():サーバー} 
ファイルディスクリプタ = select.epoll()
注册服务器的写就绪
epoll.register(server.fileno()、select.EPOLLIN)

一方TRUE:
     のための FD、イベントepoll.poll():
        靴下 = fd_socket [FD]
         印刷(FD、イベント)
        #は、ファイルディスクリプタは、対応するソケットを取得する必要が返し
        たIF:私たちの靴下==サーバー   サーバは、要求受け入れた場合 
            、クライアントを、ADDR = server.accept()
            登録されているクライアントの書き込み準備
            epoll.register(client.fileno()、選択.EPOLLIN)
            との対応を追加 
            [client.fileno()] fd_socketを= クライアント

        #は準備ができて読み
        ELIFのイベントを== select.EPOLLIN:
            データ = sock.recv(2018 IF  ないデータ:
                 ログアウトイベント
                epoll.unregister(FD)
                閉じるソケット
                sock.close()
                ソケットとの間の対応の削除
                デルfd_socketを[FD]
                 印刷誰かがOUTファック... 続行

            印刷(data.decode(UTF-8 ))
            そうバックデータを送信するために必要なデータを読み込みます次に、書き込み対象=イベントの変更
            epoll.modify(FD、select.EPOLLOUT)
            記録データ
            msgs.append((私たちの靴下、data.upper()))
         ELIFのイベントを== select.EPOLLOUT:
             のための項目MSGS [:] :
                 IF項目[0] ==私たちの靴下:
                    sock.send(項目[ 1 ])
                    msgs.remove(項目)
            書き込み対応に関心のあるイベントを切り替える 
            epoll.modify(FD、select.EPOLLIN)
コードの表示

データベースのいくつかの基本原則:

 

データベースとは何か:

  TCPは、基本的にデータベースプログラムCS構造であり、

  クライアントがサーバーに接続しデータを完了するために、サーバ命令に動作を伝達します

 

データベースとファイルシステムの対応:

  データ項目名=ジェリーは       、本質的にデータ・ファイルの行の一部であります

  記録ジェリー、18、男は      基本的に、データファイルの行であります

  表には、                                    基本的にファイルです

  データベースフォルダ                                   

  サーバー側のプログラムDBMS DataBaseManagerSystemデータベース管理システムデータベース

  データベースサーバ                         DBMSのコンピュータを実行しています

インストール:マスター

  1.ダウンロードし解凍パッケージ

  ディレクトリに解凍します2.

  3.環境変数を追加します。

       システムは、どこのパスにフルパスを追加するために、ビンをコピーします

  MySQLサーバは、システムサービスを必要とする4.それは自己始動する必要があります

      mysqld --install入力サービスが成功するかどうかを確認するために実行します

     あなたは再インストールする必要がある場合は、サービスSCが、その後、MySQLを削除する削除するには...

     サービス開始ネット開始mysqlの

     ストップサービスでnet stop mysqlの

サーバーの接続指示

     TCPはまた、機械では省略することができ、あなたは、IPアドレスとポートを指定する必要がありますサーバーを省略することができます実行されている場合、ポートがIPポートを裏返していなかった場合、プログラムの本質であります

    完全な言葉遣い:

     

mysqlの-hip -P -uユーザ名ポート- Pコード   
例:MySQLは -uroot-- p型
    
のMySQL 5.6のデフォルトはパスワードなし

管理者パスワードを変更します。

   1.あなたが知っている場合は、元のパスワードは、このツールのmysqladminはを使用することができます

mysqladminは-p古いパスワード- Uのユーザ名・パスワード新しいパスワードの
インスタンス:mysqladminは -uroot - Pパスワード123

  2.元のパスワードの事情を知りません。

     パスワードファイルを削除し、すべてのライセンス情報を削除

     サーバーが開始されたときに我々は承認情報を無視することを許可指定することができます許可テーブルをスキップ

    1.サーバが端末に直接MySQLのmysqldを--skip-グラント・テーブルを行い、オフにします

    2.いいえrootアカウントのパスワードありません

    3.更新ステートメントを実行します

         更新mysql.user設定されたパスワード=パスワード(「123」)ここで、ユーザ=「ルート」とホスト=「localhost」を、

 

おすすめ

転載: www.cnblogs.com/WBaiC1/p/11006129.html