はい、非同期ソケットの上にハンドシェイクを実装するのは完全に正常です。
は擬似コードを考えてみましょう:
socket = accept() # or connect()
// now socket is connected
socket.write(logon_request)
logon_response = socket.read()
assert(logon_response ok)
// now socket is logged in
socket.write(more_handshake);
handshake_response = socket.read()
assert(handshake_response ok)
// now socket is ready to go
while data = socket.read()
{ process data ... }
あなたはその後、非同期ソケットを使用して簡単であるステート・マシン、としてこれをモデル化することができます。以下のコードは、上記のようにanalagousであるかを参照してください、しかし、複数のコールバックに分かれ:
# state Idle -> LoggingOn
handle_connection_event(socket)
state = LoggingOn
socket.write(logon_request)
# state LoggingOn -> Handshaking
handle_login_response(socket)
logon_response = socket.read()
assert(logon_response ok)
state = Handshaking
socket.write(more_handshake);
# state Handshaking -> Ready
handle_handshake_response(socket)
handshake_response = socket.read()
assert(handshake_response ok)
state = Ready
、すべてのステートマシンに応じて、ここに来読み込み、派遣ます
handle_read(socket)
switch(state) {
case LoggingOn: handle_logon_response(socket)
case Handshaking: handle_handshake_response(socket)
case Ready: process(socket.read())
}
PS 。何らかの理由で大きなフォーマットエラーが発生しました。可読性があります。
データが継続的にストリーミングされる場合は、UDPを使用する方がよいでしょうか? –
http://www.kegel.com/c10k.html –
クライアントがudpを使用しないため不可能です – Poliquin