WebSocketのクライアント(ブラウザ)側の実装サンプル。
テキストフィールドにメッセージを入れてSubmitボタンをクリックすると
他のクライアントにもメッセージが配信される。そんだけ。
Bootstrapを使ってみたけど、説明するって意味では、
明らかにコード可読性の低下要因でしかないな~......
以下の解説の用語とかは信用しないでください。
jQueryとBootstrap使ってるけれども正しい使い方ではないと思う。
基本的には、
- Websocketプロトコルでのアクセス先(wsUri)を指定
- Websocketをnewする(websocket)
- websocketに対して必要なメソッドを実装(ここではonerror, onopen, onmessage)
- クライアント上の操作内容に応じてjQueryでぐりぐりする
<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 件のコメント:
コメントを投稿