Как получить доступ к экземплярам WebSockets в Jetty 9?

Это, вероятно, очевидно, но я новичок в этой парадигме. Я создаю сервер Jetty и зарегистрирую свой class websocket следующим образом:

Server server = new Server(8080); WebSocketHandler wsHandler = new WebSocketHandler() { @Override public void configure(WebSocketServletFactory factory) { factory.register(MyEchoSocket.class); } }; server.setHandler(wsHandler); 

Websocket получает сообщения в порядке. Я хотел бы также иметь возможность отправлять сообщения с сервера, не получив сначала сообщение от клиента. Как получить доступ к экземпляру MyEchoSocket, который создается при открытии соединения? Или, в более общем плане, как отправлять сообщения в сокете вне метода onText в MyEchoSocket?

    Два общих метода, представленные здесь в концепции упрощенного общения в чате.

    Вариант № 1: сообщите WebSocket свое состояние в центральное место

     @WebSocket public class ChatSocket { public Session session; @OnWebSocketConnect public void onConnect(Session session) { this.session = session; ChatRoom.getInstance().join(this); } @OnWebSocketMessage public void onText(String message) { ChatRoom.getInstance().writeAllMembers("Hello all"); } @OnWebSocketClose public void onClose(int statusCode, String reason) { ChatRoom.getInstance().part(this); } } public class ChatRoom { private static final ChatRoom INSTANCE = new ChatRoom(); public static ChatRoom getInstance() { return INSTANCE; } private List members = new ArrayList<>(); public void join(ChatSocket socket) { members.add(socket); } public void part(ChatSocket socket) { members.remove(socket); } public void writeAllMembers(String message) { for(ChatSocket member: members) { member.session.getRemote().sendStringByFuture(message); } } public void writeSpecificMember(String memberName, String message) { ChatSocket member = findMemberByName(memberName); member.session.getRemote().sendStringByFuture(message); } public ChatSocket findMemberByName(String memberName) { // left as exercise to reader } } 

    Затем просто используйте центральное расположение, чтобы поговорить с веб-сайтами по вашему выбору.

     ChatRoom.getInstance().writeSpecificMember("alex", "Hello"); // or ChatRoom.getInstance().writeAllMembers("Hello all"); 

    Вариант №2: создать WebSocket вручную с помощью WebSocketCreator

     @WebSocket public class ChatSocket { public ChatRoom chatroom; public ChatSocket(ChatRoom chatroom) { this.chatroom = chatroom; } @OnWebSocketConnect public void onConnect(Session session) { chatroom.join(this); } @OnWebSocketMessage public void onText(String message) { chatroom.writeAllMembers(message); } @OnWebSocketClose public void onClose(int statusCode, String reason) { chatroom.part(this); } } public class ChatCreator implements WebSocketCreator { private ChatRoom chatroom; public ChatCreator(ChatRoom chatroom) { this.chatroom = chatroom; } public Object createWebSocket(UpgradeRequest request, UpgradeResponse response) { // We want to create the Chat Socket and associate // it with our chatroom implementation return new ChatSocket(chatroom); } } public class ChatHandler extends WebSocketHandler { private ChatRoom chatroom = new ChatRoom(); @Override public void configure(WebSocketServletFactory factory) { factory.setCreator(new ChatCreator(chatroom)); } } 

    На этом этапе вы можете использовать те же методы, что и выше, чтобы поговорить с веб-сайтами по вашему выбору.

    Interesting Posts

    Что означает карет (‘^’) в C ++ / CLI?

    Вывод сеанса Windows 8.1 на разрыв RDP

    Панель инструментов JQGrid Поиск: поиск нескольких слов для столбца

    Может ли num ++ быть атомарным для ‘int num’?

    Установка частоты процессора по умолчанию в Ubuntu?

    Для двух массивов a и b. Найдите все пары элементов (a1, b1), такие, что a1 принадлежит массиву A и b1 принадлежит массиву B, сумма которого a1 + b1 = k

    Если значения марки, размера, частоты и задержки в секунду для двух наборов ОЗУ одинаковы, будут ли они работать корректно в двухканальном режиме?

    Открытие командной строки Grub при выборе Ubuntu

    Как я могу уменьшить код привязки RadioButton?

    Представление или его мастер не были найдены или механизм просмотра не поддерживает найденные местоположения

    Как сервер может выполнить сеанс с клиентом в RMI

    FFmpeg сплит видео и слияние

    Команды для списка отсутствующих исправлений Windows

    указатель на массив c ++

    Как элементы массива C ++ обрабатываются в функциях управления копированием?

    Давайте будем гением компьютера.