1 /*
2 * Copyright 2012 The Netty Project
3 *
4 * The Netty Project licenses this file to you under the Apache License,
5 * version 2.0 (the "License"); you may not use this file except in compliance
6 * with the License. You may obtain a copy of the License at:
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations
14 * under the License.
15 */
16 package org.jboss.netty.example.http.websocketx.server;
17
18 import java.net.InetSocketAddress;
19 import java.util.concurrent.Executors;
20
21 import org.jboss.netty.bootstrap.ServerBootstrap;
22 import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
23
24 /**
25 * A HTTP server which serves Web Socket requests at:
26 *
27 * http://localhost:8080/websocket
28 *
29 * Open your browser at http://localhost:8080/, then the demo page will be loaded and a Web Socket connection will be
30 * made automatically.
31 *
32 * This server illustrates support for the different web socket specification versions and will work with:
33 *
34 * <ul>
35 * <li>Safari 5+ (draft-ietf-hybi-thewebsocketprotocol-00)
36 * <li>Chrome 6-13 (draft-ietf-hybi-thewebsocketprotocol-00)
37 * <li>Chrome 14+ (draft-ietf-hybi-thewebsocketprotocol-10)
38 * <li>Chrome 16+ (RFC 6455 aka draft-ietf-hybi-thewebsocketprotocol-17)
39 * <li>Firefox 7+ (draft-ietf-hybi-thewebsocketprotocol-10)
40 * <li>Firefox 11+ (RFC 6455 aka draft-ietf-hybi-thewebsocketprotocol-17)
41 * </ul>
42 */
43 public class WebSocketServer {
44
45 private final int port;
46
47 public WebSocketServer(int port) {
48 this.port = port;
49 }
50
51 public void run() {
52 // Configure the server.
53 ServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(
54 Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));
55
56 // Set up the event pipeline factory.
57 bootstrap.setPipelineFactory(new WebSocketServerPipelineFactory());
58
59 // Bind and start to accept incoming connections.
60 bootstrap.bind(new InetSocketAddress(port));
61
62 System.out.println("Web socket server started at port " + port + '.');
63 System.out.println("Open your browser and navigate to http://localhost:" + port + '/');
64 }
65
66 public static void main(String[] args) {
67 int port;
68 if (args.length > 0) {
69 port = Integer.parseInt(args[0]);
70 } else {
71 port = 8080;
72 }
73 new WebSocketServer(port).run();
74 }
75 }