javax.websket ক্লায়েন্টের সহজ উদাহরণ


104

কেউ দয়া করে আমাকে ওয়েবসকেট ক্লায়েন্ট ব্যবহারের খুব সাধারণ উদাহরণ সরবরাহ করতে পারেন javax.websocket?

আমি ওয়েবসকেটে (ডাব্লুএস: //sket.example.com: 1234) সংযোগ করতে চাই, বার্তা পাঠাতে (চ্যানেল যুক্ত করুন) এবং বার্তাগুলি শুনতে চাই। সমস্ত বার্তা (প্রেরণ ও শুনে) জেএসএন ফর্ম্যাটে রয়েছে।

এবং বিটিডব্লিউটি কি সাধারণ ওয়েবসকেট যোগাযোগের জন্য সেরা?

উত্তর:


120

আমি javax.websocketএখানে ব্যবহার করে একটি দুর্দান্ত উদাহরণ পেয়েছি :

http://www.programmingforliving.com/2013/08/jsr-356-java-api-for-websocket-client-api.html

এখানে উপরে লিঙ্কিত উদাহরণের ভিত্তিতে কোড:

TestApp.java:

package testapp;

import java.net.URI;
import java.net.URISyntaxException;

public class TestApp {

    public static void main(String[] args) {
        try {
            // open websocket
            final WebsocketClientEndpoint clientEndPoint = new WebsocketClientEndpoint(new URI("wss://real.okcoin.cn:10440/websocket/okcoinapi"));

            // add listener
            clientEndPoint.addMessageHandler(new WebsocketClientEndpoint.MessageHandler() {
                public void handleMessage(String message) {
                    System.out.println(message);
                }
            });

            // send message to websocket
            clientEndPoint.sendMessage("{'event':'addChannel','channel':'ok_btccny_ticker'}");

            // wait 5 seconds for messages from websocket
            Thread.sleep(5000);

        } catch (InterruptedException ex) {
            System.err.println("InterruptedException exception: " + ex.getMessage());
        } catch (URISyntaxException ex) {
            System.err.println("URISyntaxException exception: " + ex.getMessage());
        }
    }
}

WebsocketClientEndpoint.java:

package testapp;

import java.net.URI;
import javax.websocket.ClientEndpoint;
import javax.websocket.CloseReason;
import javax.websocket.ContainerProvider;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;

/**
 * ChatServer Client
 *
 * @author Jiji_Sasidharan
 */
@ClientEndpoint
public class WebsocketClientEndpoint {

    Session userSession = null;
    private MessageHandler messageHandler;

    public WebsocketClientEndpoint(URI endpointURI) {
        try {
            WebSocketContainer container = ContainerProvider.getWebSocketContainer();
            container.connectToServer(this, endpointURI);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * Callback hook for Connection open events.
     *
     * @param userSession the userSession which is opened.
     */
    @OnOpen
    public void onOpen(Session userSession) {
        System.out.println("opening websocket");
        this.userSession = userSession;
    }

    /**
     * Callback hook for Connection close events.
     *
     * @param userSession the userSession which is getting closed.
     * @param reason the reason for connection close
     */
    @OnClose
    public void onClose(Session userSession, CloseReason reason) {
        System.out.println("closing websocket");
        this.userSession = null;
    }

    /**
     * Callback hook for Message Events. This method will be invoked when a client send a message.
     *
     * @param message The text message
     */
    @OnMessage
    public void onMessage(String message) {
        if (this.messageHandler != null) {
            this.messageHandler.handleMessage(message);
        }
    }

    /**
     * register message handler
     *
     * @param msgHandler
     */
    public void addMessageHandler(MessageHandler msgHandler) {
        this.messageHandler = msgHandler;
    }

    /**
     * Send a message.
     *
     * @param message
     */
    public void sendMessage(String message) {
        this.userSession.getAsyncRemote().sendText(message);
    }

    /**
     * Message handler.
     *
     * @author Jiji_Sasidharan
     */
    public static interface MessageHandler {

        public void handleMessage(String message);
    }
}

1
হাই, এই কোডটি কীভাবে কাজ করবেন যদি ওয়েবসকেট সার্ভার বার্তাগুলির একটি অবিরাম প্রবাহ প্রেরণ করে এবং ওয়েবসকেট ক্লায়েন্টের বার্তাগুলি একে একে গ্রহন করা প্রয়োজন? আমি ত্রুটিটি পেয়েছি "আউটপুট বাফারের জন্য ডিকোড হওয়া পাঠ্য বার্তাটি খুব বড় ছিল এবং শেষ পয়েন্টটি আংশিক বার্তাগুলিকে সমর্থন করে না" প্রায় এক মিনিট কোড চালানোর পরে
ফার্স্টপোস্টকমেন্টার

Mage- আমদানি org.java- ওয়েবসকেট নিশ্চিত করুন।
আলবার্ট হেন্ডরিক্স 11

9
এই কোডটি ত্রুটির সাথে ব্যর্থ হয়েছে: একটি বাস্তবায়ন শ্রেণীর সন্ধান করতে পারে নি।
কर्क সেফচিক

2
@ ডিথগাজে জাভ্যাক্স.ওবসকেট এপিআই কেবলমাত্র স্পেসিফিকেশনটির সম্পূর্ণ বাস্তবায়ন নেই আপনার জার ফাইলটি টাইরাস-স্ট্যান্ডেলোন-ক্লায়েন্ট-১.৯.জার নিতে হবে এবং একই সমস্যার চেষ্টা করতে হবে যা আপনার সমস্যার সমাধান করতে পারে। আমি আমার উদাহরণ দিয়ে পরীক্ষা করেছি এবং এটি ভাল কাজ করছে। আশা করি এটা তোমাকে সাহায্য করবে.
এসআরকে

@ মার্টিন আমি ওপেনে কীভাবে একটি বার্তা পাঠাতে পারি। উদাহরণ: আমাকে সাবস্ক্রাইব করার জন্য খোলা ওয়েবেসকেটে 'type "প্রকার": "সাবস্ক্রাইব", "প্রতীক": "এএপিএল" send' প্রেরণ করতে হবে।
বুধিকা

40

টুটলনেটের একটি সহজ ক্লায়েন্ট সাইড রয়েছে https://github.com/TooTallNate/ জাভা- ওয়েবসকেট

আপনার প্রজেক্টে কেবল ডিস্ট ফোল্ডারে জাভা_উইবসকেট.জার যুক্ত করুন।

 import org.java_websocket.client.WebSocketClient;
 import org.java_websocket.drafts.Draft_10;
 import org.java_websocket.handshake.ServerHandshake;
 import org.json.JSONException;
 import org.json.JSONObject;

  WebSocketClient mWs = new WebSocketClient( new URI( "ws://socket.example.com:1234" ), new Draft_10() )
{
                    @Override
                    public void onMessage( String message ) {
                     JSONObject obj = new JSONObject(message);
                     String channel = obj.getString("channel");
                    }

                    @Override
                    public void onOpen( ServerHandshake handshake ) {
                        System.out.println( "opened connection" );
                    }

                    @Override
                    public void onClose( int code, String reason, boolean remote ) {
                        System.out.println( "closed connection" );
                    }

                    @Override
                    public void onError( Exception ex ) {
                        ex.printStackTrace();
                    }

                };
 //open websocket
 mWs.connect();
 JSONObject obj = new JSONObject();
 obj.put("event", "addChannel");
 obj.put("channel", "ok_btccny_ticker");
 String message = obj.toString();
 //send message
 mWs.send(message);

// এবং ওয়েবসকেট বন্ধ করতে

 mWs.close();

4
উইন্ডোজ in, উইন্ডোজ ৮ এবং ওএস এক্স পর্বতের সিংহটিতে গ্রহ ব্যবহার করে কাজ করা সার্ভার ছিল উবুন্টু।
TCassells

1
জাভাক্সের পরিবর্তে আপনি কেন এই লাইব্রেরিটি বেছে নেবেন?
BvuRVKyUVlViVIc7

2
এটি স্পষ্টতই সহজ কারণ
কাইল লুক

4
ডাব্লুএসএস প্রোটোকল (সুরক্ষিত ডাব্লুএস) সমর্থন করার জন্য কোন পরিবর্তনগুলি প্রয়োজন?
মিহাইলো স্তূপ 20

2
দুর্দান্ত লাইব্রেরি, তবে এটি ডাব্লুএসএস নিয়ে সমস্যা আছে। প্রকল্পটিতে বেশ কয়েকটি মুক্ত সমস্যা রয়েছে এবং বিকাশকারীদের মন্তব্য রয়েছে যে তার আর সময় নেই।
সিকিং

18

অরুন গুপ্তের এই জাভা EE 7 উদাহরণটি দেখুন।

আমি এটি গিথুবে কাঁটাচ্ছি

প্রধান

/**
 * @author Arun Gupta
 */
public class Client {

    final static CountDownLatch messageLatch = new CountDownLatch(1);

    public static void main(String[] args) {
        try {
            WebSocketContainer container = ContainerProvider.getWebSocketContainer();
            String uri = "ws://echo.websocket.org:80/";
            System.out.println("Connecting to " + uri);
            container.connectToServer(MyClientEndpoint.class, URI.create(uri));
            messageLatch.await(100, TimeUnit.SECONDS);
        } catch (DeploymentException | InterruptedException | IOException ex) {
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

ClientEndpoint

/**
 * @author Arun Gupta
 */
@ClientEndpoint
public class MyClientEndpoint {
    @OnOpen
    public void onOpen(Session session) {
        System.out.println("Connected to endpoint: " + session.getBasicRemote());
        try {
            String name = "Duke";
            System.out.println("Sending message to endpoint: " + name);
            session.getBasicRemote().sendText(name);
        } catch (IOException ex) {
            Logger.getLogger(MyClientEndpoint.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @OnMessage
    public void processMessage(String message) {
        System.out.println("Received message in client: " + message);
        Client.messageLatch.countDown();
    }

    @OnError
    public void processError(Throwable t) {
        t.printStackTrace();
    }
}

আপনার উল্লেখ করা উচিত যে এটির জন্য ওয়েবসকেট নির্ভরতা খুব শিপিয়ে দেওয়া দরকার
জাভা মেইন

2

এখানে একটি সহজ উদাহরণ .. আপনি এটি ডাউনলোড করে এটি পরীক্ষা করতে পারেন http://www.pretechsol.com/2014/12/java-ee-websocket-simple-example.html


1
এটি কোনও জাভা ক্লায়েন্ট সম্পর্কে নয়
IHeartAndroid

2
এই উদাহরণটি জাভা সার্ভারের শেষে রয়েছে।
বোকাফ্রোগ

1

এই লাইব্রেরি org.java_websket ব্যবহার করুন

আপনার প্রথম জিনিসটি বিল্ডগ্র্যাডলে সেই পাঠাগারটি আমদানি করা উচিত

repositories {
 mavenCentral()
 }

তারপরে নির্ভরতাতে প্রয়োগটি যুক্ত করুন implementation}

implementation "org.java-websocket:Java-WebSocket:1.3.0"

তারপরে আপনি এই কোডটি ব্যবহার করতে পারেন

আপনার ক্রিয়াকলাপে ওয়েবসাইটসোক্লায়েন্টের মতো বিষয় ঘোষণা করুন

private WebSocketClient mWebSocketClient;

তারপরে কলব্যাকের জন্য এই পদ্ধতিটি যুক্ত করুন

 private void ConnectToWebSocket() {
URI uri;
try {
    uri = new URI("ws://your web socket url");
} catch (URISyntaxException e) {
    e.printStackTrace();
    return;
}

mWebSocketClient = new WebSocketClient(uri) {
    @Override
    public void onOpen(ServerHandshake serverHandshake) {
        Log.i("Websocket", "Opened");
        mWebSocketClient.send("Hello from " + Build.MANUFACTURER + " " + Build.MODEL);
    }

    @Override
    public void onMessage(String s) {
        final String message = s;
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                TextView textView = (TextView)findViewById(R.id.edittext_chatbox);
                textView.setText(textView.getText() + "\n" + message);
            }
        });
    }

    @Override
    public void onClose(int i, String s, boolean b) {
        Log.i("Websocket", "Closed " + s);
    }

    @Override
    public void onError(Exception e) {
        Log.i("Websocket", "Error " + e.getMessage());
    }
};
mWebSocketClient.connect();

}


-2

আমার প্রকল্পে আমার স্প্রিং 4.2 রয়েছে এবং অনেক সোকজেএস স্টম্প বাস্তবায়ন সাধারণত স্প্রিং বুটের বাস্তবায়নের সাথে ভালভাবে কাজ করে। বেলডাংয়ের এই বাস্তবায়ন কাজ করেছে (আমার জন্য স্প্রিং ৪.২ থেকে ৫ না পরিবর্তন করে)। তার ব্লগে উল্লিখিত নির্ভরতাগুলি ব্যবহার করার পরে, এটি এখনও আমাকে ক্লাসনটফাউন্ডএরর দিয়েছে। এটি ঠিক করার জন্য আমি নীচের নির্ভরতা যুক্ত করেছি।

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.2.3.RELEASE</version>
    </dependency>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.