2017-09-11 22 views
0

私は最近Socket.IOを使い始めたiOS開発者です。私のiOSアプリケーションのライフサイクルでは、私のサーバーは私のアプリケーションからクライアントとしてメッセージを受信しますが、特定のケースでは、サーバーはクライアントとしてWebブラウザからメッセージを受け取る必要があります。テキストフィールドとボタンを含む非常に基本的なブラウザUIをテストしています。そのボタンのタップで、テキストフィールドに入力された数値コードをサーバーに送信する必要があります。これは、次のようになります。Socket.IOクライアントイベントハンドラが呼び出されていませんか?

<form> 
    Code:<br> 
    <input type="text" id="code" name="code"><br> 
    <input type="submit" id="validatebutton" value="Validate"> 
    <script src="/socket.io-client/dist/socket.io.js"></script> 
    <script> 
    document.getElementById("validatebutton").onclick = function() { 
     var socket = io('http://localhost:3000'); 
     socket.on('connect', function(clientSocket) { 
     clientSocket.emit('validateCode', document.getElementById("code")); 
     }); 
    }; 
    </script> 
</form> 

接続は正常に動作します。このコードを実行すると、クライアントは正常に待機ソケットサーバーに接続します。唯一の問題は、イベントハンドラが実行されないことです。私はここに非常にオフになりますが、私はのために行ってきましたがスウィフトSDKに含まれているクライアントのイベントハンドラ、である可能性があります

self.socket.on(clientEvent: .connect, callback: { (data:[Any], ack:SocketAckEmitter) in 
    // Do something here 
}) 
self.socket.connect() 

私はちょうどという名前(Javascriptのクライアントは、クライアントのイベントハンドラを持っていることを前提としてい'connect'また、サーバーへの接続の瞬間にクライアントによって受信されます。私が言ったように、私はここから離れているかもしれません。私はちょうどSocket.IOのドキュメントをウェブサイトに掲載しています。これは私にこのようにすることを指示します。誰かが私に何が欠けているか、私が間違っていることを教えてもらえれば、それは大いに感謝しています。すべてのnoobishnessのために申し訳ありませんが、私は実際に公式のドキュメントが非常にあいまいであり、Stackに関する他の質問が私のためにあまりにも進んでいるので、どこに向けるべきか分かりません。

答えて

0

emit関数を接続内に配置しません。あなたのクリックイベントは、おそらく実行なっていたが、EMITは、それが(ソケットがサーバーに接続したときにのみ実行されます)connect機能

に包まれることに起因しなかった

<script> 
    var socket = io('http://localhost:3000'); 
    document.getElementById("validatebutton").onclick = function() { 
     socket.emit('validateCode', document.getElementById("code")); 
    }; 
    </script> 

クライアントで以下のように発光してみてください

また、私は独自のファイルにJavaScriptを書いていますが、今のところ、少なくともフォームの後ろに(その内部にはない)動作します。

+0

ありがとうございました!私は最初にクイック接続を行っていたので、クライアントはメッセージを出してからすぐにサーバとの接続を切断していたため、プロセスが少し変更されました。そのため、最初はソケット接続が 'onclick'機能の中にあったのです。これはまあまあうまくいくので、それはすべていいです。さらに、私がそれについて何か読むことができる限り、JavascriptクライアントはSwiftクライアントとは違って '.connect'と' .disconnect'機能を持っていないようですので、後で切断するだけではないでしょうとにかくメッセージを発信する。 –

+0

最後の1つ(関連性のない)質問:複数のクライアントにメッセージを送信するにはどうすればよいですか?私は特定のクライアントにメッセージを出す方法を知っていますが、クライアントの配列を渡してメッセージを送信することも可能ですか?今、私は(サーバー側で) 'io.to(sockets.join())。emit(" myMessage "、someData);としようとしていますが、これは何もしていないようです。奇妙な部分は、私はどちらかエラーが発生していないので、私は絶対にこれが間違っているかどうかは分かりません。 –

+0

ここにnode.jsの例があります。サーバー側ですべてのクライアントに送信するには、 'var io = require( 'socket.io')(http);'と 'io.emit(" myIdentifier "、myData);'のような単純な操作を行うことができます。接続されたクライアントのサブセットにのみ送信するために、私は頭の上から、わかりません、申し訳ありません。 –

関連する問題