Jfinal3.5已升级jetty到9+希望官方支持WebSocket

一 目前jetty已升级到9+ 希望官方能直接集成WebSocket

二 希望可以自定义一组超类用于ActionMapping 中的排除非action方法 


三 希望能知道下 jetty下WebSocket除了这种一个个加还有什么好办法没

ServerContainer wscontainer = WebSocketServerContainerInitializer.configureContext(webApp);

//自行扫描获取 class数组  遍历加入

wscontainer.addEndpoint(clazz);   

另外这么加了以后貌似 热加载没生效


评论区

lyh061619

2018-10-18 09:10

1、其实用WebSocket,不一定用jetty来做集成,有个更简便的方法,自己做个处理器就可能无缝隙的使用WebSocket了,给出如下:
public class WebSocketHandler extends Handler {

private Pattern filterUrlRegxPattern;

public WebSocketHandler(String filterUrlRegx) {
if (StrKit.isBlank(filterUrlRegx))
throw new IllegalArgumentException("The para filterUrlRegx can not be blank.");
filterUrlRegxPattern = Pattern.compile(filterUrlRegx);
}


@Override
public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
if (filterUrlRegxPattern.matcher(target).find())
return ;
else
next.handle(target, request, response, isHandled);
}

}
作用应该是给"^/websocket"(这个路径进行放行。)
2、做排除非action方法用@NotAction,如果想自定义一个超类完全可以自己定义,ActionHandle已开放,在做自定义处理超类时,记得在项目配置文件中配置把ActoinHandle更换下.me.setActionHandle(MyActionHandle);

无涯

2018-10-18 09:32

@lyh061619 这样只是放行了ws请求实际上没有任何用处,容器本身必须要能找到服务端才行tomcat 是自动完成 开发阶段 jetty 方便点

panpan123

2018-10-18 10:05

我觉得还是不要集成太多的东西,以精简core为主,然后增加插件开发,想要啥直接放进去就好。

JFinal

2018-10-18 10:18

@无涯 这周末会着手开发一个 undertow-server 项目,里面会加 websocket 支持,这个项目比 jetty-server 要好用

如果你着急用,可以自建一个类叫 MyServer 继承一下 :
public class MyServer extends com.jfinal.server.jetty.JettyServer {
...
}
然后,覆盖掉里面的 start() 方法,基本照抄父类的代码,然后添加一点 websocket 的支持代码,具体的 websocket 代码大致如此:
ServerContainer container = WebSocketServerContainerInitializer.configureContext(webApp);

// 下面添加 Endpoint 注解修饰过的一些类就好,用一段扫描代码或者在 MySever 中利用 set 方法设置进来也可以
container.addEndpoint(...);

最后启动的时候:
new MyServer("src/main/webapp", 80, "/", 5).start();

也就是说不再用原先的 JFinal.start(...) 了,因为原先的方法本质也是转调的你上面类似的代码

lyh061619

2018-10-18 13:09

@无涯 所以说嘛非jetty也可以,如用tomcat,只是官网没有实现内嵌tomcat

lyh061619

2018-10-18 13:13

@JFinal 从大并发性能测试上排位:undertow->tomcat->jetty,也可考虑搞个嵌入个tomcat,适应场景是开发用内置tomcat,生产环境也用tomcat的,在windows系统下用tomcat多。

lyh061619

2018-10-18 13:18

@panpan123 现在jfinal容器看波总代码,已经分离出来了,也就是如果想用内置的容器就加依赖包就成,所以对core没有影响,框架是留有扩展容器接口的。

无涯

2018-10-19 17:58

@JFinal 自己搞了个 第一次启动没问题 修改后热加载 就不行了 还在摸索阶段 -_-||

Qnfc

2018-12-02 18:33

@JFinal @JFinal WebSocketServerContainerInitializer.configureContext(webApp);中的 WebSocketServerContainerInitializer找不到包,是那个包?

kamding

2019-05-08 11:58

@Qnfc 我也遇到这个问题了WebSocketServerContainerInitializer 这个到底是哪里的包

kamding

2019-05-08 13:45


org.eclipse.jetty.aggregate
jetty-all
9.2.14.v20151106

找到了 是这个 自己回复一下 哈哈

JFinal

2019-05-08 14:33

@kamding 用上 jfinal 整合的 jetty-server-2019.3 即可
jetty-serve 早就升级了

JFinal

2019-05-08 14:34

@kamding 当然,最好是用 jfinal-undertow , 这里有文档:
https://www.jfinal.com/doc/1-4

可以添加 websocket

hapoy9

2020-06-05 15:15

@JFinal 添加 jetty-server-2019.3依赖后,extents com.jfinal.server.jetty.JettyServer一直找不到该类, 现在的jfinal 使用的是2017.5的core,一直找不到原因

Jasen

2020-09-28 10:58

@hapoy9 extents com.jfinal.server.jetty.JettyServer不是public