2015年9月1日火曜日

WebSocketのサンプルコード(クライアント編)


WebSocketのクライアント(ブラウザ)側の実装サンプル。

テキストフィールドにメッセージを入れてSubmitボタンをクリックすると
他のクライアントにもメッセージが配信される。そんだけ。


Bootstrapを使ってみたけど、説明するって意味では、
明らかにコード可読性の低下要因でしかないな~......


以下の解説の用語とかは信用しないでください。
jQueryとBootstrap使ってるけれども正しい使い方ではないと思う。
基本的には、

  1. Websocketプロトコルでのアクセス先(wsUri)を指定
  2. Websocketをnewする(websocket)
  3. websocketに対して必要なメソッドを実装(ここではonerror, onopen, onmessage)
  4. クライアント上の操作内容に応じてjQueryでぐりぐりする
(ここでは、submitボタンをクリックするとテキストフィールドに入力したメッセージが 送信される。同時に他のクライアントにもメッセージが配信される。)
<html>
    <head>
        <title>Chatter</title>
        
        
        <link href="css/bootstrap.min.css" rel="stylesheet"></link>
        <script src="./js/jquery-2.1.1.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(function(){
                var wsUri = "ws://" + document.location.host + "/WebSocketChatter/MessageReceiptor";
                var websocket = new WebSocket(wsUri);
                websocket.onerror = function(evt) {
                    
                };
                websocket.onopen = function(evt) {
                    
                };
                websocket.onmessage = function(message) {
                    console.log('Received Text:'+message.data);
                    $('<div class="well row" style="margin-bottom: 2px;">
'+message.data+'</div>
').appendTo('#container_message');
                };
                
                $('#btn_submit').on('click', function(){
                    var text = $('#text_message').val();
                    if(text !== '') {
                        websocket.send(text);                        
                        console.log('Send Text:'+text);
                    }
                });
                
                $('#btn_clear').on('click', function(){
                    $('#text_message').val('');
                });
            });
        </script>
    </head>
    <body>
        <div class="row">
            <div class="col-lg-3">
</div>
<div class="col-lg-3">
                <h1 class="label-primary" style="border-radius: 3px 3px;">
WebSocketChatter</h1>
</div>
</div>
<div class="row">
            <div class="col-lg-3">
</div>
<div class="col-lg-3">
                <h2 class="label-info">
入力項目</h2>
</div>
</div>
<div class="row">
            <div class="col-lg-3">
</div>
<div class="col-lg-3">
                <label for="text_message">Message</label>
                <input class="form-control" id="text_message" placeholder="Text Message" type="text" />
            </div>
</div>
<div class="row">
            <div class="col-lg-3">
</div>
<div class="col-lg-4 btn-toolbar">
                <div class="btn-group">
                    <button class="btn btn-success" id="btn_submit" type="button">Submit    <span class="glyphicon glyphicon-check"></span></button>
                    <button class="btn btn-danger" id="btn_clear" type="button">Clear   <span class="glyphicon glyphicon-remove"></span></button>
                </div>
</div>
</div>
<div class="row">
            <div class="col-lg-3">
</div>
<div class="col-lg-3">
                <h2 class="label-info">
メッセージコンテナ</h2>
<div class="col-lg-12" id="container_message">
                </div>
</div>
</div>
</body>
</html>

0 件のコメント:

コメントを投稿