プロトコルに぀いお䞀蚀...たたはやかんを䞀緒に蚭蚈したしょう

実際、プロトコルだけでなく、耇雑なシステムの盞互䜜甚のロゞックに぀いおもです。 もちろん、これはBigDataではありたせんが、ただ圌の頭ず槍を粉砕する䜕かがありたす。







開発の最初の段階で、読者がこの楜しいプロセスに参加できるように、それに぀いおラむブで話すず脅した。 そしお今、時が来たした。 私たちのプロトタむプはほが準備ができおおり、珟圚、生産およびサヌバヌずモバむルアプリケヌションの開発のためのドキュメントに取り組んでいたす。 そしお、プロトタむプは最も簡単であり、私たちがその䞭で解決したすべおのタスクは、幌皚園、ストラップのズボンであるこずに気付きたした。

ツむヌトを送信したり写真を投皿したりするずきに耇雑なロゞックがどのように機胜するのか疑問に思ったこずはありたせんか それは目に芋えず、99.9でナヌザヌから隠されおおり、完党に芋えたせん。 自分で蚭蚈しなければならなかった瞬間たで、私もそれに気づきたせんでした。





行こう

ここでやかんを䜜っおいたす。 プロトタむプのように電話から盎接制埡されたすが、すべおがシンプルで論理的です



ロヌカルネットワヌク、クラむアント、デバむスがありたす。 サヌバヌ、アカりント、承認はありたせん。 矎人 ケトルを賌入しお家に持ち垰り、ネットワヌクに接続したす。 どのように接続したすか



最初の䜿甚

2぀の事実から進みたす。自宅では、ナヌザヌはWiFiをたったく䜿甚しおいない可胜性があり、ただ䜿甚しおいる堎合、ナヌザヌの名前ずパスワヌドはわかりたせん。 したがっお、構成プロセスのナヌザヌは、ティヌポットがネットワヌクにログむンできるように、ティヌポットに名前ずパスワヌドを枡す必芁がありたす。

これにはいく぀かの方法がありたすボタンでネットワヌク名ずパスワヌドを入力するか、電話画面を点滅させるか、 DTMFコヌドでキヌキヌを鳎らしお送信するか、アプリケヌションを䜿甚しお内郚にケトルを接続しお蚭定する必芁がある有名なWiFiネットワヌクを䜜成できたす。 協議埌、埌者のオプションを䜿甚するこずにしたした。 これは最終決定ではなく、読者は将来のナヌザヌず同様に圱響を䞎えるこずができたす。蚘事の埌、投祚でオプションを遞択しおください。



しかし、今のずころは、WiFi認蚌オプションから続行したす。



デバむスを初めおオンにするず、事前に定矩された名前芋぀けられるようにでオヌプンWiFiネットワヌクが䜜成されたすが、最埌にランダムに挿入されたす同時にオンになった耇数のダミヌが互いに干枉しないように、AVI-WifiKettle-6574のようなものです。

アプリケヌションはそれに接続し、ネットワヌクを䜜成するか珟圚のネットワヌクに接続するかをナヌザヌに尋ね、パスワヌド付きの名前を芁求したす。 前の質問に応じお、構成終了埌のやかんはネットワヌクを䜜成するか、珟圚のネットワヌクに接続したす。



すべおがシンプルで明確です。 アプリケヌションからデバむスぞのコマンドの送信も非垞に簡単に芋えたす。



アプリケヌションはティヌポットに接続し、それにコマンドを送信したす。 コマンドが正しいかどうかをチェックした埌パヌサヌぱラヌなしで機胜し、デバむスの皮類ず蚀語のバヌゞョンはタヌゲットに察応したす、やかんはコマンドを受け取ったず蚀い、実行を開始したす。 コマンドが実行されるず、やかんはコマンドが完了したこずを報告し、アプリケヌションは「Your kettle has boiled。」ずいうメッセヌゞでナヌザヌを喜ばせるこずができたす。



タスクが耇雑になりたす。 珟圚、リモヌト管理甚のサヌバヌもありたす。

しかし、それほど単玔ではありたせん。 リモヌトコントロヌルが必芁ですか これを行うには、別の芁玠であるサヌバヌを導入する必芁がありたす。 スキヌムは次の圢匏を取りたす。



それほど難しくないようです。 ただし、サヌバヌを1桁远加するず、ロゞックの耇雑さが増したす。



ここで、たずえば、最初のむンクルヌゞョンがアプリケヌション偎からどのように芋え始めたか



承認が行われたしたケトルを有効にできる人はいたせん。これはアカりントサポヌトを意味したす。 プログラムをオンにするず、ナヌザヌに既存のアカりントにログむンするか、新しいアカりントを䜜成するかを尋ねる必芁がありたす。 どういうわけかデバむスを互いに区別するために、UUID-Dデバむスデバむスのシリアル番号を入力したす。 これはプログラムによっお生成され、最初の接続でデバむスに送信されたす。 将来、ナヌザヌはデバむスからUUID-Dを取埗できなくなり、完党にリセットしお新しいUUID-Dを蚭定できるようになりたす。 同時に、デバむスのシリアル番号を知らないず、コマンドを送信できたせん。 その結果、デバむスに初めお接続したアプリケヌションのみがシリアル番号を認識したす。 シリアル番号はサヌバヌ䞊でナヌザヌアカりントナヌザヌが䜜成した堎合に保存されるため、玛倱しおもナヌザヌを脅かすこずはありたせん。 しかし、ここに新たな問題がありたす-デバむスは、異なるアカりントを持っおいる耇数の人によっお制埡される可胜性がありたす。 そのため、デバむスの暩利を他の人に譲枡する方法が必芁です。



䜜業の論理を耇雑にしないために、暩利分離のシステムを攟棄し、目的のデバむスのアカりントでUUID-Dを持っおいるすべおの人に平等な暩利を䞎えたす。 これは、最初のアプリケヌションがデバむスの暩限を別のアカりントに転送するずすぐに、デバむスを完党に制埡し、同じ方法で他のアカりントに暩限を転送できるこずを意味したす。 これにより、誰かに暩利を䞎えたい堎合、ティヌポットの「所有者」のティヌポットを奪った人を探す必芁がなくなりたすが、埓業員が仕事を蟞めおアカりントにアンタむドUUID-Dがある堎合、圌はオフィスのティヌポットを裏切りたす倜に。 たた、デバむスをリセットしお再床セットアップする以倖は䜕もできたせん-同時に新しいUUID-Dを受信し、叀いUUID-Dのレコヌドがアカりントずデヌタベヌスから削陀されたす。 叀いレコヌドを消去できるかどうかを刀断するのは簡単です。初期化䞭に、デバむスのMACアドレスがサヌバヌに送信され、既にデヌタベヌスにある堎合、デバむスは再床初期化され、叀いレコヌドは䞍芁です。



ナニヌクな郚屋に぀いお

ちなみに、UUIDは非垞に興味深い゜リュヌションでもありたす。それを知ったずき、私は長い間幞せでした。 :)

たずえば、誰かがアカりントを䜜成するサヌバヌがありたす。 たたは、ファむルを远加したす。 たたは蚘録。 たたは䜕か他のもの、それは重芁ではありたせん。 サヌバヌ䞊の゚ンティティにどのように番号を付けたすか 最初の答えは順番です。 人が写真をアップロヌドしたす-それは00001ず呌ばれたす。次の写真をアップロヌドしたす-それは既に00002ず呌ばれ、3番目-00003ず呌ばれたす。 サヌバヌは写真に番号を付けるので、問題はありたせん-圌は以前にアップロヌドされた写真を芋お、その番号に1を远加し、それを曞き留めたす。 すべおが玠晎らしいです。

しかし、サヌビスは開発䞭であり、すでに別のサヌバヌが必芁です。 しかし、ここに問題がありたす-サヌバヌ間の同期が必芁です。 たた、ファむルの同期が比范的遅い堎合、たたはたったく同期できない堎合は、最埌のファむル名に関する情報が垞に最新である必芁がありたす。 そうしないず、異なるサヌバヌの2人のナヌザヌがわずかなギャップで写真をアップロヌドした堎合、2番目のサヌバヌで情報がただ曎新されない可胜性があり、ファむルは同じ番号を受け取りたす。 そしお最埌に、ペティアがガヌルフレンドに送るためにアップロヌドした子猫の代わりに、ノァシャの女の子の写真が公開されたす。 そしお、ピヌトはカヌドを受け取った圌のガヌルフレンドに、それが「単なるサヌバヌ゚ラヌ、それが起こる」こずを蚌明しようず非垞に努力したす。 はい。ノァシャは、ガヌルフレンドではなく、子猫を芋぀けるず怒っおしたいたす。



さらに、別の写真をアップロヌドするずきにロックを提䟛する必芁がありたす。情報をどれだけ速く曎新しなくおも、2人のナヌザヌが実際に同時に写真をアップロヌドする可胜性がありたす。 ぀たり、そうするために、昇順でファむルに名前を付けるこずはできたせん。

たずえば、近い将来に䞀臎しないように、十分に倧きい乱数を生成できたす。 たた、アクティブにデヌタを倉曎する堎合、珟圚の時刻に応じお生成したす。2぀のファむルが偶然䞀臎する堎合、2぀の乱数が䞀臎するだけでなく、同じ秒に䞀臎する必芁がありたす。 しかし、この組み合わせの可胜性は非垞に小さく、おそらく子猫が他の女の子の写真にならないためです:(

芁するに、「すべおがすでに暙準化されおいたす」 RFC 4122-Universally Unique Identifierに蚘茉されおいるこのケヌスには既成の暙準がありたすが、単にUUIDであり、次のようになりたす65C4B640-3452-11E3-AA6E-0800200C9A66。 。



しかし、私は十二十億のおっぱいに気を取られたした。 ケトルの最初のむンクルヌゞョンは次のずおりです。



単玔なデバむスアプリケヌション認蚌ず比范しお、倚くの新しいものがここに远加されたしたデバむスにはUUIDが割り圓おられ、サヌバヌぞの接続を詊みお、そこにWiFiモゞュヌルのUUIDずMACアドレスを送信したす理由は既に説明したした。



安党性

「デバむスはできるだけシンプルであるべき-デバむスは保護されなければならない」ずいう矛盟に぀いお考えお、興味深い決定に至りたした。 より正確には-アカりントを䜿甚しおセキュリティシステムを実装する方が䟿利ですが、アカりントを䜜成するために必芁なケトルを䜿甚するず蚀う人に盎面するのは私が初めおです。 その結果、アカりントが䜜成されたすが、ナヌザヌはこれに関䞎したせん-䞊の写真で確認できたす。 初期化䞭に、ランダムな名前ずパスワヌドでアカりントを䜜成し、それを承認甚のキヌずしお䜿甚するアプリケヌションに保存したす。 ナヌザヌはこれを知らない可胜性があるため、アカりント䜜成の問題は解決されたした。

はい、すでに聎衆から異議を聞いおいたす-アカりントに満足しおいる人はどうですか ナヌザヌは自分のアカりントに耇数のデバむス、耇数の電話を持぀こずができたす。たたは、頻繁に曎新された埌、アプリケヌションを再むンストヌルする必芁がありたす。 事実䞊のアカりントがありたすが、それらを䜿甚するこずは困難です-ログむンA811BF51-98B8-4604-9A8C-D72D8E40D846ずパスワヌド7960E625-912D-4625-BC9E-08E9B3047219があるこずを忘れないでください:)

もちろん、そのようなナヌザヌを苊しめるこずはありたせんので、アカりントの名前を倉曎する機䌚をナヌザヌに䞎える必芁がありたす。 ナヌザヌは自分のアカりントが既に䜜成されおいるこずを知らないので、単玔さの錯芚を砎壊する必芁はなく、アむテムを「アカりントを䜜成する」ず呌ぶこずができたす。 しかし、この䞋に隠れるこずはたさに名前の倉曎になりたす。



アカりントの名前を再床倉曎する機䌚をナヌザヌに䞎えるか、ランダムから通垞の名前に倉曎するかを決定するかどうかはただ決めおいたせん。 私はこの質問をあなたの良心に任せたす。投祚投祚では、アむテムを遞択するか、コメントで意芋を述べるこずができたす。



チヌムワヌク

そしお今、私たちは最も興味深い郚分-デバむスぞのコマンドの送信を開始しおいたす。 アプリケヌションは次のようにしたす。



アプリケヌションは、デバむスに盎接ではなく、サヌバヌにコマンドを送信するようになりたした。 それでも、いく぀かのアプリケヌションが異なるチヌムで互いに殺そうずする状況が実装されおいたす。 Petyaが家に座っお、ケトルの電源を入れお枩床を維持しおいるずしたす。 そしお、ただ芋知らぬ人の女の子ずのカヌドのために圌に腹を立おおいる女の子プチは、圌に電話しおやかんを枩めるように頌みたくないが、圌女の電話からこれをしようずしおいる。 残念ながら、このresみのゞェスチャヌは、圌女が期埅したずおりに認識されたせん。別のコマンドが既にケトルで実行されおいるため、圌女の電話のアプリケヌションぱラヌを報告したす。 しかし、同時に、このロゞックでは、コマンドをキャンセルするには、たずキュヌクリアコマンドを送信し、次に新しいコマンドを送信する必芁がありたす。 ボタンを間違えお、ティヌ甚に90床に加熱するためのボタンではなく、乳児甚調補粉乳の枩床36床に加熱するためにボタンを抌したプチにずっおはあたり䟿利ではありたせん。 圌は自分が間違っおいたこずを理解し、別のボタンを抌したす-アプリケヌションぱラヌを報告したす。 ええ、そうです-コマンドは既に実行されおいたす。 同じプログラムで別のコマンドを既に実行しおいた堎合、確認なしでコマンドをキャンセルする远加のハンドラヌを䜜成する必芁がありたした。

その結果、私たちに合った仕事の論理にたどり着きたした。チヌムの送信元の電話から、䞍必芁な質問なしに別の電話に亀換できたすが、他の電話からは䞍可胜です。 他の人がお茶をteaれるのを防ぐのは無䟡倀だからです。



そのため、アプリケヌションはサヌバヌにコマンドを送信し、サヌバヌ...サヌバヌは次のずおりです。



圌は暩利を確認しここでPetyaはこの特定のケトルをオンにできたす、シリアル番号をチヌムに割り圓お、デヌタベヌスに保存し、デバむスぞのオヌプン接続で送信しようずしたす。 接続がない堎合は、衚瀺されるたで埅機したす。 送信埌、サヌバヌはコマンドの正垞な配信に関するメッセヌゞを受信し、それをアプリケヌションにリダむレクトしたす。 そしお、コマンドが完了するず、コマンドをログに曞き蟌み、コマンドをデヌタベヌスから削陀し、UUID-Dを䜿甚しおティヌポットぞのコマンドの実行に関する通知を、このUUID-Dをアカりントに蚘録しおいる党員に送信したす。

だから、家に近づく少女プチは、それでもやかんが沞隰したずいう通知を受け取り、圌女が到着しおやかんを枩めおいたこずを理解し、最埌にこのク゜はがきのためにペティアを蚱したす。



そしお、サヌバヌからコマンドを受け取るティヌポット、氞遠の劎働者は、それを実行する以倖に遞択肢がありたせん。



もちろん、「Command Execution」ずいう小さなボックスの䞋では、ブロック線図は劣らずたたはこれよりも倧きいですが、これはたったく別の話です...



い぀ものように

1プラむベヌトで文法ず句読点の゚ラヌを報告する

2論理、文章、思考の誀りに぀いお-コメント。

3Srachの配眮-蚱可されおいたす。

4やかんを䜜る男を賌読する 画像 䌚瀟のペヌゞ 賌読ボタン

5 ここでフルサむズで画像を衚瀺できたす。

6そしお、 ここからMac甚のOmniGraffleプログラムの圢匏で゜ヌスを入手できたす 。 理由はわかりたせんが、突然誰かがそれを根拠にするず喜んでいたす。



All Articles