Kami menggunakan jetty container versi 9.3.11 untuk menyebarkan aplikasi kami
kami menggunakan klien tyrus untuk menghubungkan klien ke server websocket yang telah kami terapkan.
ketika saya terhubung menggunakan kode berikut:
WebSocket ws = null;
try {
ws = new WebSocketFactory().createSocket(server)
.addListener(new NotifierAdapter(userId, channel))
.addExtension(WebSocketExtension.PERMESSAGE_DEFLATE).connect();
} catch (WebSocketException we) {
connect(server, userId, channel);
}catch(Exception e)
{
e.printStackTrace();
}return ws;
Sekitar 8000 koneksi, mesin saya menggunakan 40% Memori
Tetapi dengan melihat modifikasi kode (menghapus ekstensi deflate)
try {
ws = new WebSocketFactory().createSocket(server)
.addListener(new NotifierAdapter(userId, channel))
.connect();
} catch (WebSocketException we) {
connect(server, userId, channel);
}catch(Exception e)
{
e.printStackTrace();
}return ws;
Mampu terhubung ke 15.000 koneksi hanya dengan 15% Memori Apakah ada kebocoran terkait deflator bahkan di server Jetty versi terbaru..
Apakah ada cara untuk menonaktifkan PERMESSAGE_DEFLATE di sisi server jetty.. Kami juga menggunakan strategi spring websocket yang meneruskan jettyrequestupgrade
Kode konfigurasi pegas adalah sebagai berikut:
@Configuration
@EnableWebMvc
@EnableAspectJAutoProxy
@EnableWebSocket
public class WebMVCConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer {
private static final String NOTIFIER_ENDPOINT_URL = "/notificationHandler";
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(socketHandler(), NOTIFIER_ENDPOINT_URL).setAllowedOrigins("*");
}
@Bean
public WebSocketHandler socketHandler() {
return new NotificationSocketHandler();
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Bean
public DefaultHandshakeHandler handshakeHandler() {
WebSocketPolicy policy = new WebSocketPolicy(WebSocketBehavior.SERVER);
policy.setInputBufferSize(8192);
policy.setIdleTimeout(600000);
WebSocketServerFactory ws=new WebSocketServerFactory(policy);
ws.getExtensionFactory().unregister("permessage-deflate");
return new DefaultHandshakeHandler(new JettyRequestUpgradeStrategy(ws));
}
}
Meskipun saya membatalkan pendaftaran permessage-deflate ketika saya terhubung dari browser di header respons, saya dapat melihat bahwa bendera masih diaktifkan, adakah perubahan lain yang harus dilakukan dalam wadah untuk ini??
Atau apakah ada masalah dengan konfigurasi websocket pegas:
Juga header responsnya adalah sebagai berikut:
Connection:Upgrade
Sec-WebSocket-Accept:xbbUnu7pDWs9Q0st4T1LzsIfqao=
Sec-WebSocket-Extensions:permessage-deflate
Upgrade:WebSocket
Saya rasa bug di bawah ini belum terselesaikan.
https://github.com/eclipse/jetty.project/issues/293
Apakah ada solusi untuk ini (Konfigurasi eksplisit di server jetty untuk menonaktifkan PERMESSAGE_DEFLATE di wadah server jetty atau konfigurasi pegas untuk Jetty
Setelah mencari saya tidak dapat menemukan solusi apa pun pada wadah server/konfigurasi kode dengan spring websocket tidak berfungsi ..
Sebagai solusinya saya menulis interseptor yang akan menghapus parameter entension Sec Websocket dari header..sehingga server akan mengirimkan respons tanpa ekstensi ini