Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 904
Есть такой ChannelInterceptor, с методом preSend:

@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {

    LOGGER.info("WEBSOCKETCHANNELINTERCEPTOR -> "+message.toString());

    StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);

    if (accessor != null && StompCommand.CONNECT.equals(accessor.getCommand())) {
        List<String> headers = accessor.getNativeHeader(AUTHORIZATION);
        accessor.setUser(websocketAuthenticationManager.authenticate(new JWTTokenAuthentication(tokenUtils.resolveToken(headers != null ? headers.get(0) : null))));

    }

    return message;
}


В случае любой ошибки при CONNECT-е я хочу отключить пользователя от вебсокета. как это сделать?
19 фев 19, 23:40    [21814958]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Sergunka
Member

Откуда:
Сообщений: 1590
Tsyklop
Есть такой ChannelInterceptor, с методом preSend:

@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {

    LOGGER.info("WEBSOCKETCHANNELINTERCEPTOR -> "+message.toString());

    StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);

    if (accessor != null && StompCommand.CONNECT.equals(accessor.getCommand())) {
        List<String> headers = accessor.getNativeHeader(AUTHORIZATION);
        accessor.setUser(websocketAuthenticationManager.authenticate(new JWTTokenAuthentication(tokenUtils.resolveToken(headers != null ? headers.get(0) : null))));

    }

    return message;
}


В случае любой ошибки при CONNECT-е я хочу отключить пользователя от вебсокета. как это сделать?


В интерфейс загляни там должно быть, что нибудь на вроде метода onError
20 фев 19, 02:18    [21815019]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 904
Sergunka, какой интерфейс?
20 фев 19, 11:29    [21815230]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37071
Tsyklop,
Сейчас при ошибке что происходит? Райзе проглатывается и все работает?
20 фев 19, 12:58    [21815323]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 904
Petro123, Сейчас, и по дефолту так, когда возникает ошибка сервак шлет клиенту сообщение ERROR, но соединение не рвет.
20 фев 19, 13:38    [21815371]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37071
Tsyklop
Petro123, Сейчас, и по дефолту так, когда возникает ошибка сервак шлет клиенту сообщение ERROR, но соединение не рвет.
значит уровень ошибки не катастрофа. Нет нужды рвать. Дальше что сломалось?
20 фев 19, 14:30    [21815452]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37071
Мое имхо, что перехватчики не могут рвать канал. Это не их компетенция. Они просто..... Подслушать и подправить.
20 фев 19, 14:45    [21815463]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 904
Petro123
значит уровень ошибки не катастрофа. Нет нужды рвать. Дальше что сломалось?

А мне нужно разорвать соединение ибо если CONNECT адекватно не прошел то и юзера нет. А он мне нужен.
20 фев 19, 14:46    [21815464]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37071
Tsyklop,
А разорвав откуда юзверь появится? Это поможет?
20 фев 19, 14:49    [21815469]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37071
Petro123,
Ну и решать, нужен юзверь или нет, это же БЛ и вполне возможно клиента дело.
20 фев 19, 14:50    [21815471]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37071
Ну и если разорвать канал, клиент вообще ничего не узнает о проблеме. Логично?
20 фев 19, 14:52    [21815477]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Sergunka
Member

Откуда:
Сообщений: 1590
Tsyklop
Sergunka, какой интерфейс?


Class ChannelInterceptor extends Interface

Обычное дело делаешь метод оверид на onError и в этом методе вызываешь слоз коннектион это базовый дизайн для любого ООП.

Если бы дал гитхаб или хотябы опубликовал заоголовок класса то можно было бы даже помочь. Но извини не у всех такая мощная чуйка, что там у тебя в коде написано.
20 фев 19, 19:32    [21815770]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 904
Sergunka, тут такого нет. Это спринг поверх websocket-api.

Код выложить не могу, ибо подписал договор о неразглашении.
20 фев 19, 22:46    [21815877]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 904
Petro123
Tsyklop,
А разорвав откуда юзверь появится? Это поможет?

А не надо что бы он появился. Надо разорвать и все.
20 фев 19, 22:47    [21815878]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 904
Petro123
Ну и если разорвать канал, клиент вообще ничего не узнает о проблеме. Логично?

Нет. ему придет ошибка. Перед отключением придет ошибка.
20 фев 19, 22:47    [21815881]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
mayton
Member

Откуда: loopback
Сообщений: 39264
А какая решается в топике проблема?
20 фев 19, 23:44    [21815908]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Sergunka
Member

Откуда:
Сообщений: 1590
Tsyklop
Sergunka, тут такого нет. Это спринг поверх websocket-api.

Код выложить не могу, ибо подписал договор о неразглашении.


https://github.com/SVyatkin/dragonfly-demo/blob/master/src/main/java/com/vyatkin/dragonfly/service/WebSocketServerEndPoint.java

Попробуй через аннотации @OnError и @OnClose примерно так должно выглядеть... вообще проблема не нова должен легко найти на https://stackoverflow.com


	/**
	 * @param session
	 *            - session object
	 * @param closeReason
	 *            - The reason of close of session
	 */
	@OnClose
	public void onClose(Session session, CloseReason closeReason) {
		logger.info("Server: Session " + session.getId() + " closed because of " + closeReason.toString()); 
		
    	// Remove session from the connected sessions set
    	pullConnections.remove(session);
	}

	/**
	 * @param session
	 *            - current session object
	 * @param t
	 *            - Throwable instance containing error info
	 */
	@OnError
	public void onError(Session session, Throwable t) {
		logger.error("Server: Session " + session.getId() + " error " + t.getMessage());
		
    	// Remove session from the connected sessions set
    	pullConnections.remove(session);
	}
20 фев 19, 23:57    [21815920]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 904
Sergunka, я еще раз говорю - я использую вебсокеты в спринге (не чисто либу для сокетов). У спринга своя штука над websocket-api и я не сделаю того что предлагаете Вы.
21 фев 19, 11:25    [21816103]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 904
mayton
А какая решается в топике проблема?

как отрубить клиента от сокета со стороны сервака
21 фев 19, 11:25    [21816104]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
mayton
Member

Откуда: loopback
Сообщений: 39264
Tsyklop
mayton
А какая решается в топике проблема?

как отрубить клиента от сокета со стороны сервака

Это не проблема. Это ваше сиюминутное хотение.

Какая была настоящая бизнесовая проблема?
21 фев 19, 11:31    [21816112]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37071
mayton
Это ваше сиюминутное хотение
хорошо сказал). Ни одного слова лишнего)
21 фев 19, 11:37    [21816116]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 904
Ясно. Закрыто
21 фев 19, 11:57    [21816141]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 37071
Tsyklop,
Еще есть старое старое правило - закрывают ресурс там где его открывают.
Я конечно, бывает его нарушаю, но правило существует) имхо.
21 фев 19, 12:11    [21816156]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
mayton
Member

Откуда: loopback
Сообщений: 39264
Tsyklop
Ясно. Закрыто

Есть такой нудный документ. Называется "The WebSocket Protocol".
Почитай на досуге тут https://tools.ietf.org/html/rfc6455

Там должны быть ответы на основные вопросы. Подозреваю что не все браузеры точно его соблюдают.
Но убежден что проблема (если она существует) давно известна. Запротоколирована и на нее есть решение.
Возможно в части конфигураций.
21 фев 19, 12:47    [21816206]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить клиента от websocket? Spring + websocket + sockjs  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 15272
mayton
Tsyklop
Ясно. Закрыто

Есть такой нудный документ. Называется "The WebSocket Protocol".
Почитай на досуге тут https://tools.ietf.org/html/rfc6455

Там должны быть ответы на основные вопросы. Подозреваю что не все браузеры точно его соблюдают.
Но убежден что проблема (если она существует) давно известна. Запротоколирована и на нее есть решение.
Возможно в части конфигураций.

при закрытии/переходе на другую страницу бракзеры закрывают ws, но надкушенный фрукт этого не делает.....
21 фев 19, 13:01    [21816233]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Java Ответить