Spring Framework 3.x で websocket をセットアップできます
spring-core 4.0 でリリースされた Rossen Stoyanchev の SpringConfiguration に基づいて、その方法を示す小さな概念実証アプリケーションを開発しました。
アプリケーションは、Spring Bean を使用して挨拶の言葉を選択し、Websocket メッセージに返信するuri/wstest
を使用して Websocket サーバー エンドポイントをセットアップします。@Autowired
index.html
websocket 接続が開始され、 websocket をサポートするブラウザーで実行されている html ページ ( ) によってメッセージが送信されます。
エンドポイントの登録は、コンテキストの初期化時に ServletContextListener によって行われ、エンドポイントがインスタンス化されると、Spring で接続されます。
@WebListener
public class MyApplication implements ServletContextListener {
private final static String SERVER_CONTAINER_ATTRIBUTE = "javax.websocket.server.ServerContainer";
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext container = sce.getServletContext();
final ServerContainer serverContainer = (ServerContainer) container.getAttribute(SERVER_CONTAINER_ATTRIBUTE);
try {
serverContainer.addEndpoint(new MyEndpointConfig(MyEndpoint.class, "/wstest"));
} catch (DeploymentException e) {
e.printStackTrace();
}
}
}
エンドポイントは次のとおりです。
@Component
public class MyEndpoint extends Endpoint {
@Autowired
MyService myService;
@Override
public void onOpen(Session session, EndpointConfig config) {
session.addMessageHandler(new MyMessageHandler(session));
}
class MyMessageHandler implements MessageHandler.Whole<String> {
final Session session;
public MyMessageHandler(Session session) {
this.session = session;
}
@Override
public void onMessage(String message) {
try {
String greeting = myService.getGreeting();
session.getBasicRemote().sendText(greeting + ", got your message (" + message + "). Thanks ! (session: " + session.getId() + ")");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
完全なソースとすぐに実行できる例を、私のGithub ページでチェックアウトしてください。