一番簡単なWebSocketをやりとりするJavaサーバープログラム 1

1 > 2 > 3 > 4 > 5 > (ページと結果)

WebSocketでデータのやりとりをするプログラムを書いてみました。
Apache Minaをつかってテキストのやりとりをするだけのサーバーは書いたことあるんですが、
今回はHandShakeの部分でどうしてもバイナリをうけとらないとだめなので、その部分がよくわからなかったです。
でもとりあえずできました。
apache minaをつかってサーバーを書くいい練習資料にはなるのではないでしょうか?
(WebSocketはプロトコル仕様も非常に単純だし。)

今回はhttp://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-05
このドラフトの仕様をたよりに、HandShakeとデータの通信だけ実装してあります。

まずは、エントリー部
package com.ttProject.webSocket;
 
import java.net.InetSocketAddress;
 
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
 
import com.ttProject.webSocket.library.WebSocketHandler;
 
/**
 * WebSocketサーバープログラム
 */
public class Main {
	private static final int PORT = 8080;
	/**
	 * エントリー
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			new Main();
		}
		catch(Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * コンストラクタ
	 */
	public Main() throws Exception{
		SocketAcceptor acceptor = new NioSocketAcceptor();
		acceptor.setHandler(new WebSocketHandler());
		acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 5);
		acceptor.setReuseAddress(true);
		acceptor.bind(new InetSocketAddress(PORT));
		System.out.println("ServerStarted!!");
	}
}
 
ポートを8080番に
IdleTimeをとりあえず5秒に
再起動時にBindExceptionがでたらめんどくさいのでsetReuseAddressを設定

今回はHandler部でIoBuffer経由でなまデータを利用するので、codec系の設定はなしです。
今後WebSocketのセキュリティーまわりの問題とか解決するときに、きちんとcodec等利用したプログラムにしたいと考えています。

1 > 2 > 3 > 4 > 5 > (ページと結果)

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2011年02月11日 21:21
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。