关于在Android端如何开启WebSocket

来源:互联网 发布:matlab 矩阵保存excel 编辑:程序博客网 时间:2024/06/04 17:58

关于这方面的资料网上有很多,在自己做项目的时候,发现不同的后台处理方式,直接导致android端的链接成功与否。后来终于在GitHub上找到了一个可以与后台成功连接的demo,整理成一个service就可以直接用。

1.先在build.gradle中导入
compile (‘io.socket:socket.io-client:0.8.3’) {
exclude group: ‘org.json’, module: ‘json’
}

2.直接开启service就可以用,记得在AndroidManifest中注册自己的service

    Intent intent = new Intent(this, WebSocketService.class);    startService(intent);
public class WebSocketService extends Service{    private Socket mSocket;    private final String TAG = this.getClass().getSimpleName();    @Nullable    @Override    public IBinder onBind(Intent intent) {        return null;    }    @Override    public void onCreate() {        super.onCreate();    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        Log.i(TAG,"创建WebSocket:");        initWebSocket();        return super.onStartCommand(intent, flags, startId);    }    @Override    public void onDestroy() {        super.onDestroy();        mSocket.disconnect();        /*可以指定关闭单个Emitter.Listener,也可以一次性全部关闭*///        mSocket.off(Socket.EVENT_CONNECT, onConnect);//        mSocket.off(Socket.EVENT_DISCONNECT, onDisconnect);//        mSocket.off(Socket.EVENT_CONNECT_ERROR, onConnectError);//        mSocket.off(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);        mSocket.off();        Log.i(TAG,"WebSocket销毁了:");    }    private void initWebSocket() {        if (mSocket == null) {            try {                /*输入相对于的地址,开头肯定是http,否则会报错*/                mSocket = IO.socket("http://lin.f3322.net:82");            } catch (URISyntaxException e) {                e.printStackTrace();            }            mSocket.on(Socket.EVENT_CONNECT, onConnect);            mSocket.on(Socket.EVENT_DISCONNECT, onDisconnect);            mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError);            mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);            mSocket.on("/push/lin/40", new Emitter.Listener() { //监听回调函数                @Override                public void call(Object... args) {                }            });            mSocket.connect();        }    }    private Emitter.Listener onConnect = new Emitter.Listener() {        @Override        public void call(Object... args) {            Log.i(TAG," WebSocket连接:" + Arrays.toString(args));        }    };    private Emitter.Listener onDisconnect = new Emitter.Listener() {        @Override        public void call(Object... args) {            Log.i(TAG," WebSocket断开:" + Arrays.toString(args));        }    };    private Emitter.Listener onConnectError = new Emitter.Listener() {        @Override        public void call(Object... args) {            Log.i(TAG,"WebSocket连接异常:" + Arrays.toString(args));            /*如果想长连接,则不用关闭service*/            stopSelf();        }    };}

参考的GitHub上的demo:https://github.com/nkzawa/socket.io-android-chat

原创粉丝点击