|
ToDo:
|
サンプルサイトをまねてみた。Java側だけはStreamを使ってみました。簡単にできちゃう。こりゃいい。
参考NetBeansとGlassFishを使ってJavaEE7のWebSocketを遊ぶ。あとAWSでデプロイとか。 - Yuji Blog
参考WebSocketをネタにJava EE 7正式版を試してみる - きしだのはてな
Java側
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
/**
*
* @author hikazoh
*/
@ServerEndpoint("/endpoint")
public class NewWSEndpoint {
static Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>());
@OnMessage
public void onMessage(String message) {
sessions.stream().forEach((Session s) -> s.getAsyncRemote().sendText(message));
}
@OnOpen
public void onOpen(Session s) {
sessions.add(s);
}
@OnClose
public void onClose(Session s) {
sessions.remove(s);
}
}
Client側
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Facelet Title</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script type="text/javascript">
var socket;
$(document).ready(function(){
var host="ws://localhost:8080/WebSocketSample/endpoint";
socket = new WebSocket(host);
socket.onmessage = function(message){
$('#log').append(message.data + "<br />");
};
$('#send').click(function(){
var text = $('#msg').val();
socket.send(text);
$('#msg').val('');
});
});
</script>
</h:head>
<h:body>
Hello from Facelets
<div id="log"></div>
<input id="msg" type="text" />
<button id="send">送信</button>
</h:body>
</html>