مشخصات مقاله
-
1706
-
0.0
-
6467
-
0
-
0
آموزش استفاده از WebSocket ها در Android با استفاده از OkHttp
آموزش استفاده از بارکد و QR code scanner دراندروید با کمک Google Mobile Vision در Android
همانطور که می دانید، WebSocket یک پروتکل ارتباطی کامپیوتری است، که در یک تک اتصال TCP کانال های ارتباطی کاملا دو رشته ای را فراهم میکند. WebSocket در HTML 5 پشتیبانی می شود. با توجه به اینکه ورژن کتابخانه ی OkHttp 3.5 است، می توانید در برنامه های اندرویدی خود از اتصال WebSocket ها نیز استفاده کنید. در این آموزش شما چگونگی ایجاد یک نرم افزار چت ساده را با استفاده از Echo WebSocket Server که در آدرس زیر موجود است، خواهید آموخت.
توجه داشته باشید این آموزش در یوتیوب نیز موجود است.
اولین گام، اضافه کردن وابستگی OkHttp در فایل Gradle build تان است.
compile 'com.squareup.okhttp3:okhttp:3.6.0'
به خاطر داشته باشید که حتما Internet permission را در Android manifest تان اضافه کنید. زیرا این برنامه برای ایجاد اتصال WebSocket به سرور Echo WebSocket از شبکه استفاده می کند. در این آموزش به یکlayout ساده نیاز داریم که در آن برای شروع اتصال و تبادل با سرور دکمه ای به کار رفته است. همچنین از یک TextView استفاده خواهیم کرد که به عنوان یک console output برای پیام های دریافت شده از سرور استفاده می شود.
< ?xml version="1.0" encoding="utf-8"? >
< RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.ssaurel.websocket.MainActivity" >
< Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Start !"
android:layout_marginTop="40dp"
android:textSize="17sp"/ >
< TextView
android:id="@+id/output"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/start"
android:layout_centerHorizontal="true"
android:textSize="16sp"
android:layout_marginTop="30dp"/ >
< /RelativeLayout >
سپس می توانیم کد جاوای برنامه را بنویسیم. بخش اصلی این کد متدی است که برای ایجاد اتصال به WebSocket connection استفاده می شود، همچنین شیء WebSocketListener ای که کار تبادل با سرور را برعهده دارد.
private final class EchoWebSocketListener extends WebSocketListener {
private static final int NORMAL_CLOSURE_STATUS = 1000;
@Override
public void onOpen(WebSocket webSocket, Response response) {
webSocket.send("Hello, it's SSaurel !");
webSocket.send("What's up ?");
webSocket.send(ByteString.decodeHex("deadbeef"));
webSocket.close(NORMAL_CLOSURE_STATUS, "Goodbye !");
}
@Override
public void onMessage(WebSocket webSocket, String text) {
output("Receiving : " + text);
}
@Override
public void onMessage(WebSocket webSocket, ByteString bytes) {
output("Receiving bytes : " + bytes.hex());
}
@Override
public void onClosing(WebSocket webSocket, int code, String reason) {
webSocket.close(NORMAL_CLOSURE_STATUS, null);
output("Closing : " + code + " / " + reason);
}
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
output("Error : " + t.getMessage());
}
}
ارسال پیام ها در متد onOpen انجام می شود. پیام های دریافتی از سرور Echo WebSocket درون متد onMessage نمایش داده می شوند. در نظر داشته باشید که پیام ها می توانند به صورت متنی یا پیام های شانزده شانزدهی نیز باشند. در نهایت با استفاده از متد close مربوط به شیء WebSocket اتصال را می بندیم. برای ایجاد اتصال WebSocket به کمک OkHttp نیاز است که با استفاده از URL سرور Echo WebSocket یک شیء در خواستی را (Request object) درون پارامتر بسازیم. سپس متد newWebSocket مربوط به شیء OkHttpClient را فراخوانی کنیم.
این کد باید به شکل زیر باشد:
package com.ssaurel.websocket;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.WebSocket;
import okhttp3.WebSocketListener;
import okio.ByteString;
public class MainActivity extends AppCompatActivity {
private Button start;
private TextView output;
private OkHttpClient client;
private final class EchoWebSocketListener extends WebSocketListener {
private static final int NORMAL_CLOSURE_STATUS = 1000;
@Override
public void onOpen(WebSocket webSocket, Response response) {
webSocket.send("Hello, it's SSaurel !");
webSocket.send("What's up ?");
webSocket.send(ByteString.decodeHex("deadbeef"));
webSocket.close(NORMAL_CLOSURE_STATUS, "Goodbye !");
}
@Override
public void onMessage(WebSocket webSocket, String text) {
output("Receiving : " + text);
}
@Override
public void onMessage(WebSocket webSocket, ByteString bytes) {
output("Receiving bytes : " + bytes.hex());
}
@Override
public void onClosing(WebSocket webSocket, int code, String reason) {
webSocket.close(NORMAL_CLOSURE_STATUS, null);
output("Closing : " + code + " / " + reason);
}
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
output("Error : " + t.getMessage());
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start = (Button) findViewById(R.id.start);
output = (TextView) findViewById(R.id.output);
client = new OkHttpClient();
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
start();
}
});
}
private void start() {
Request request = new Request.Builder().url("ws://echo.websocket.org").build();
EchoWebSocketListener listener = new EchoWebSocketListener();
WebSocket ws = client.newWebSocket(request, listener);
client.dispatcher().executorService().shutdown();
}
private void output(final String txt) {
runOnUiThread(new Runnable() {
@Override
public void run() {
output.setText(output.getText().toString() + "\n\n" + txt);
}
});
}
}
در نهایت، تنها کافیست برنامه ی خود را اجرا کرده و از نتیجه لذت ببرید.
برای مطالعه سرفصل آموزش جامع و عملی برنامه نویسی Android کلیک نمایید .