Jetty 如何创建自定义 WebSocket

Posted

技术标签:

【中文标题】Jetty 如何创建自定义 WebSocket【英文标题】:Jetty How to Create Custom WebSocket 【发布时间】:2014-12-09 23:42:25 【问题描述】:

上网查了一下,发现创建套接字的方法是创建一个带有@WebSocket注解的类,并为事件使用所需的注解方法。为了使用这个套接字,一个套接字处理程序是这样使用的:

import org.eclipse.jetty.websocket.server.WebSocketHandler;
import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;

import rsvp.RSVPSocket;

public class RSVPWebSocketHandler extends WebSocketHandler


    @Override
    public void configure ( WebSocketServletFactory factory )
    
        factory.register( MySocket.class );
    


我的问题是:如果“MySocket”类有一个带参数的构造函数,我怎样才能让工厂正确调用那个?

【问题讨论】:

【参考方案1】:

您可以从您的 servlet 创建套接字。例如:

@WebServlet(name = "MyWebSocketServlet", urlPatterns = "/myurl")
public class MyWebSocketServlet extends WebSocketServlet 
    private final static int IDLE_TIME = 60 * 1000;

    @Override
    public void configure(WebSocketServletFactory factory) 
        factory.getPolicy().setIdleTimeout(IDLE_TIME);
        factory.setCreator(new CustomWebSocketCreator());
    

还有 CustomWebSocketCreator:

public class CustomWebSocketCreator implements WebSocketCreator 

    @Override
    public Object createWebSocket(ServletUpgradeRequest req, ServletUpgradeResponse resp) 
        return new MySocket();
    

更多详情: http://www.eclipse.org/jetty/documentation/9.1.5.v20140505/jetty-websocket-server-api.html

【讨论】:

【参考方案2】:

根据Jetty doc,您应覆盖您自己自定义派生的WebSocketCreator 类的createWebSocket 方法(将您的创建者的实例传递给configure

另请参阅此答案How do I access instantiated WebSockets in Jetty 9?

【讨论】:

以上是关于Jetty 如何创建自定义 WebSocket的主要内容,如果未能解决你的问题,请参考以下文章

LayUi创建一个自定义通用模块

如何让 eclipse-jetty 插件扫描和识别 websocket 类?

Jetty websocket 客户端类 WebSocketClient 线程安全吗?

ios10自定手势有啥用

Jetty Websocket 服务器在本地工作,但远程连接失败并出现“主机已关闭”错误,如何解决?

创建自定义验证电子邮件页面 URL 和自定义重置密码页面 URL