您可以使用 spring framework 3.x 设置 websockets
我开发了一个小型概念验证应用程序来演示如何基于 Rossen Stoyanchev 随 spring-core 4.0 发布的 SpringConfiguration。
应用程序使用 uri 设置一个 websocket 服务器端点/wstest
,它将使用一个@Autowired
spring bean 来选择一个问候词并回复一个 websocket 消息。
index.html
websocket 连接由在支持 websocket 的浏览器中运行的 html 页面 ( ) 发起并发送消息。
Endpoint 注册由 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 页面上查看完整的源代码并准备好运行示例。