デスクトップアプリケーションからWebSocketにアクセスする

クリーバー・モタ:

この設定でspring-websocketを使用したプロジェクトがあります:

SocketHandler.java

@Component
public class SocketHandler extends TextWebSocketHandler {
    List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();

    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) throws InterruptedException, IOException {
        Map<String, String> value = new Gson().fromJson(message.getPayload(), Map.class);
        session.sendMessage(new TextMessage("Hello " + value.get("name") + " !"));
    }

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        sessions.add(session);
    }
}

WebSocketConfig.java

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new SocketHandler(), "/name");
    }
}

index.html

  <table>
    <tr>
      <td>
        <button id="connect" type="button" onclick="connect();">Connect</button>
        <button id="disconnect" type="button" disabled="disabled" onclick="disconnect();">Disconnect</button>
      </td>
      <td>
        <label for="name">What is your name?</label>
        <input type="text" id="name" placeholder="Your name here...">
        <button id="send" type="button" onclick="send();">Send</button>
      </td>
    </tr>
  </table>

  <hr>

  <table id="conversation" border="2">
      <thead>
      <tr>
          <th>Greetings</th>
      </tr>
      </thead>
      <tbody id="greetings">
      </tbody>
  </table>

script.js

var ws;

function setConnected(connected) {
    var connect = document.querySelector("#connect");
    var disconnect = document.querySelector("#disconnect");
    var conversation = document.querySelector("#conversation");
    var greetings = document.querySelector("#greetings");

    if(connected) {
      connect.setAttribute("disabled", "disabled");
      disconnect.removeAttribute("disabled");
      conversation.style.display = 'block';
    } else {
      connect.removeAttribute("disabled");
      disconnect.setAttribute("disabled", "disabled");
      conversation.style.display = 'none';
    }

    greetings.innerHTML = "";
}

function connect() {
    ws = new WebSocket('ws://localhost:8080/name');
    ws.onmessage = function(text) {
        showGreeting(text.data);
    }
    setConnected(true);
}

function disconnect() {
    if (ws != null) {
        ws.close();
    }
    setConnected(false);
}

function send() {
  var name = document.querySelector("#name");
    var data = JSON.stringify({'name': name.value});
  ws.send(data);
}

function showGreeting(message) {
  var greeting = document.querySelector("#greetings");
  var tr = document.createElement("tr");
  var td = document.createElement("td");
  td.innerText = message;
  tr.appendChild(td);
  greeting.appendChild(tr);
}

たとえば、Java / SwingやC ++ / Qtを使用してデスクトップクライアントアプリケーションを開発できます。これは、サーバーのようにこのアプリケーションと通信し、デスクトップアプリケーションからデータを受信して​​、接続されているすべてのクライアントにブロードキャストできます。それ。

DKディリップ:

これは、JavaベースのWebSocketクライアントの最小の非GUIバージョンです。


サーバ

SocketHandler.java

import com.google.gson.Gson;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

@Component
public class SocketHandler extends TextWebSocketHandler {
    List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();

    @Override
    public void handleTextMessage(WebSocketSession currentSession, TextMessage message) throws InterruptedException, IOException {
        Map<String, String> value = new Gson().fromJson(message.getPayload(), Map.class);
        TextMessage textMessage = new TextMessage("Hello from " + value.get("name") + "!");

        for (WebSocketSession session : sessions) {
            if (session.isOpen()) {
                session.sendMessage(textMessage);
            }
        }
    }

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        sessions.add(session);
    }
}

クライアント

MyWebSocketClient.java

package com.example;

import java.net.URI;
import java.util.Scanner;
import javax.websocket.*;
import javax.websocket.RemoteEndpoint.Basic;

@ClientEndpoint
public class MyWebSocketClient {
    @OnMessage
    public void onMessage(String message) {
        System.out.println("[Greetings] " + message + "\n");
    }

    public static void main(String[] args) {
        WebSocketContainer container = null;
        Session session = null;
        Basic basicRemote = null;
        Scanner inputScanner = null;

        try {
            container = ContainerProvider.getWebSocketContainer();
            session = container.connectToServer(MyWebSocketClient.class, URI.create("ws://localhost:8080/name"));
            basicRemote = session.getBasicRemote();
            inputScanner = new Scanner(System.in);

            while (true) {
                String input = inputScanner.nextLine();
                basicRemote.sendText("{ \"name\": \"" + input + "\" }");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

pom.xml

<dependencies>
    <dependency>
        <groupId>javax.websocket</groupId>
        <artifactId>javax.websocket-client-api</artifactId>
        <version>1.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.tyrus.bundles</groupId>
        <artifactId>tyrus-standalone-client</artifactId>
        <version>1.15</version>
    </dependency>
</dependencies>

結果:

ここに画像の説明を入力してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

外部アプリケーションからSymfonyセッション値にアクセスする

分類Dev

デスクトップアプリケーションに対する複数のGoogleアクセス許可

分類Dev

ソケットアプリケーションにアクセスするHttpClient

分類Dev

SpringBootアプリケーションからSessionFactoryにアクセスする

分類Dev

.NetWebアプリケーションからIBMInformixにアクセスする

分類Dev

WebアプリケーションからHDFSにアクセスする

分類Dev

JavaデスクトップアプリケーションからGoogleAnalyticsに統計を送信する

分類Dev

Webアプリケーションからデータベースにアクセスするためのベストプラクティス

分類Dev

ホストからコンテナのWebアプリケーションにアクセスする方法

分類Dev

アプリケーション内からJBossデータディレクトリにアクセスするにはどうすればよいですか?

分類Dev

PHPアプリケーションからデスクトップアプリケーションへ

分類Dev

CPUがRAMからアプリケーションとデータにアクセスする方法

分類Dev

MVVMアプリケーションでコアデータスタックにアクセスする

分類Dev

MVVMアプリケーションでコアデータスタックにアクセスする

分類Dev

デスクトップアプリケーションにセレンを使用する方法は?

分類Dev

Webサイトからデスクトップアプリケーションを起動する

分類Dev

デスクトップアプリケーションから中断されたUWPアプリケーションを再開する

分類Dev

外部からEmberアプリケーションインスタンスにアクセスする(cordova)

分類Dev

クォーツジョブからgrailsアプリケーション設定にアクセスする

分類Dev

Nserviceバスを使用してWebアプリケーションからデスクトップWindowsアプリケーションにメッセージを送信する

分類Dev

コンソールアプリケーションから仮想ディレクトリにアクセスする

分類Dev

デスクトップアプリケーションから見た環境変数を表示する

分類Dev

クラスタ外のアプリケーションからkubernetesのpostgresにアクセスする

分類Dev

Windows8.1のTMの[アプリ]タブからデスクトップアプリケーションを非表示にする必要があります

分類Dev

QML内からアプリケーションバージョンにアクセスする

分類Dev

デスクトップアプリケーションにSignalRを使用するのは正しいですか?

分類Dev

デスクトップアプリケーションからGlassfishにデプロイされたサーブレットにアクセスすることは可能ですか?

分類Dev

スクリプトプロセッサベースのアプリケーションをオーディオワークレットに移植する

分類Dev

既存のWebアプリをデスクトップアプリケーションに変換する

Related 関連記事

  1. 1

    外部アプリケーションからSymfonyセッション値にアクセスする

  2. 2

    デスクトップアプリケーションに対する複数のGoogleアクセス許可

  3. 3

    ソケットアプリケーションにアクセスするHttpClient

  4. 4

    SpringBootアプリケーションからSessionFactoryにアクセスする

  5. 5

    .NetWebアプリケーションからIBMInformixにアクセスする

  6. 6

    WebアプリケーションからHDFSにアクセスする

  7. 7

    JavaデスクトップアプリケーションからGoogleAnalyticsに統計を送信する

  8. 8

    Webアプリケーションからデータベースにアクセスするためのベストプラクティス

  9. 9

    ホストからコンテナのWebアプリケーションにアクセスする方法

  10. 10

    アプリケーション内からJBossデータディレクトリにアクセスするにはどうすればよいですか?

  11. 11

    PHPアプリケーションからデスクトップアプリケーションへ

  12. 12

    CPUがRAMからアプリケーションとデータにアクセスする方法

  13. 13

    MVVMアプリケーションでコアデータスタックにアクセスする

  14. 14

    MVVMアプリケーションでコアデータスタックにアクセスする

  15. 15

    デスクトップアプリケーションにセレンを使用する方法は?

  16. 16

    Webサイトからデスクトップアプリケーションを起動する

  17. 17

    デスクトップアプリケーションから中断されたUWPアプリケーションを再開する

  18. 18

    外部からEmberアプリケーションインスタンスにアクセスする(cordova)

  19. 19

    クォーツジョブからgrailsアプリケーション設定にアクセスする

  20. 20

    Nserviceバスを使用してWebアプリケーションからデスクトップWindowsアプリケーションにメッセージを送信する

  21. 21

    コンソールアプリケーションから仮想ディレクトリにアクセスする

  22. 22

    デスクトップアプリケーションから見た環境変数を表示する

  23. 23

    クラスタ外のアプリケーションからkubernetesのpostgresにアクセスする

  24. 24

    Windows8.1のTMの[アプリ]タブからデスクトップアプリケーションを非表示にする必要があります

  25. 25

    QML内からアプリケーションバージョンにアクセスする

  26. 26

    デスクトップアプリケーションにSignalRを使用するのは正しいですか?

  27. 27

    デスクトップアプリケーションからGlassfishにデプロイされたサーブレットにアクセスすることは可能ですか?

  28. 28

    スクリプトプロセッサベースのアプリケーションをオーディオワークレットに移植する

  29. 29

    既存のWebアプリをデスクトップアプリケーションに変換する

ホットタグ

アーカイブ