socket.io実践編(1)

3222 ワード

SOcketについてioは、websocketを言わないわけにはいきません.websocketはhtml 5の新しい特性の一つで、どれだけのweb開発者が興奮しているのか、websocketはwebプログラムクライアントとサービス端末の間に長い接続を保つことができ、リアルタイム通信を実現することができ、APIは簡単で使いやすいですが、ブラウザのサポートが異なるため、また頭が痛いことです.その後、socket.ioが現れたある程度socket.ioはwebsocketですが、実はsocketです.ioはwebsocketとは別のものであり、websocketはsocketと言える.ioのサブセット、socket.ioの下位実装には5つの方法があります.websocketはそのうちの1つにすぎません.デフォルトでは、私たちが構築したsocketにすぎません.io接続、下位層もwebsocketを呼び出すインスタンスです.私たちがio.connect()socket接続を確立すると、namespaceインスタンスが返されます.namespaceインスタンスにはsocketインスタンスがあります.新しい接続を作成したり、メッセージを送信したりすると、namespace->socket->transport->websocket(xhrpolling...)実際にメッセージを送信する本当の送信者は、最下位のwebsocketかxhrpollingか他のいくつかですが、socket.ioは組織者にすぎず、接続を確立する必要がある場合は、内部で接続方法を選択し、接続を実現します.具体的なsocket.io内部実装には、ソースコードのさらなる学習も必要である.
本文のレベルはまだsocket.ioの実践上、そのカーネルの具体的な実現には絶えず探求する必要がある.次に最近socket.でio開発におけるいくつかの経験は,主にクライアントであり,サービス側の理解も深くないが,信じることも大同小異である.
まず簡単にsocket.を紹介しますioの使い方:
socket = io.connect("http://" + config.serverip + ":" + config.serverport, { 'reconnect': true });


            socket.on('connect', function(data) {

                console.log("Connected to Server");
                global.reconnectFailCount = 0;
            });
            socket.on('connect_failed', function(data) {
                console.log("connect_failed to Server");
            });
            socket.on('error', function(data) {
                console.log("error");
                alert("       !!!");
            });
            socket.on('reconnecting', function (data) {
                console.log("reconnecting");
                global.reconnectFailCount++;
                if (global.reconnectFailCount >= 6) {
                    
                    alert("       ,         ");
                }
            });
            socket.on('reconnect', function (data) {
                console.log("reconnect");
                global.reconnectFailCount--;
            });
            socket.on('disconnect', function (data) {
                console.log("disconnect");
            });

上記のように、connect()の2番目のパラメータで「force new socket」を指定して新しい接続を強制的に確立しない限り、socket接続を作成しました.ここで強調する必要があります.デフォルトでは、connect()の2番目のパラメータで「force new socket」を指定しない限り、同じsocketインスタンスを指します.socketインスタンスはconnect,connect_をリスニングしましたfailedなどの事件、これらの事件を軽視しないでください、実はすべてとても役に立ちます、彼らを理解して、socket.ioは基本的に大きな問題がないので、分析してみましょう.socketを作成したばかりの頃は、実は空のsocketであり、idが割り当てられておらず、サーバとの接続に成功した後にのみidが生成されるため、connectでsocketを取得するidを得ることができ、socketのidは役に立つ場合があり、socketに対応するユーザー情報を格納するために使用される場合があります.socket接続に成功すると、サービス側とクライアントはタイミングよくハートビートパケットを送信し、ある側が長時間応答していない場合、デフォルトの接続が切断され、私たちのネットワークが不安定になったり、他の接続に影響する要素が存在する場合、サーバと接続が切断され、切断時にdisconnect傍受に触れ、reconnectを宣言していない場合、切断するとサーバと再接続されなくなり、作成時にreconnect:trueと宣言した場合、切断後もクライアントは新しい接続を試み、reconnectingリスニングがトリガーされ、接続が成功しない場合は複数回接続を試み続け、接続が成功するとreconnectリスニングがトリガーされます.この場合、元のsocket接続はなくなります.内部に新しい接続が作成され、socketは新しいidを取得し、最後にconnectリスニングが再びトリガーされます.
ここはしばらく深くは入っていませんがioカーネル実装ですが、これらはsocketを利用しています.ioはインスタント通信を実現すれば全く問題なく,接続が安定しており,中間にエピソードが再接続されてもうまく処理され,全く問題はない.後でゆっくりと深く討論します.
私はsocket.ioの認識はまだ浅いので、レンガを撮ってください.欠陥を調べさせてください.