java_webSocket实现android消息推送
来源:互联网 发布:淘宝直通车无线端推广 编辑:程序博客网 时间:2024/06/07 00:32
背景
公司的项目是直播相关,很自然的就会有直播间以及聊天的功能,和不少直播一样,我们也选择了环信,环信的接入和使用相对来说挺方便的,但是随着直播间人数的增多,出现了一个很严重的问题,我们称之为异次元,进入直播间看不到别人的互动,自己玩的不亦乐乎,别人也看不到…
考虑到问题的严重性,我们决定换一种方式:webSocket.
webSocket简介
因为是做直播中即时通讯,因此消息的发送将会非常频繁,如果采取http请求,那发送每一条消息,将会新建一个链接并发送,这无疑是致命的,而webSocket是一种新的协议,长连接,一次连接成功后,即可多次发送消息,退出直播间时将连接断开即可,具体可以看这篇文章WebSocket 是什么原理?为什么可以实现持久连接?.
项目使用
1.添加依赖,采用的java_webSocket
compile “org.java-websocket:Java-WebSocket:1.3.0”
2.客户端使用java实现websocket client
public class XZMsgClient extends WebSocketClient{ public XZMsgClient(URI serverURI ) { super( serverURI, new Draft_17()); } public void sendMsg(String text) throws NotYetConnectedException { //write a message send(text); } @Override public void onOpen( ServerHandshake handshakedata ) { System.out.println( "opened connection" ); // if you plan to refuse connection based on ip or httpfields overload: onWebsocketHandshakeReceivedAsClient } @Override public void onMessage( String message ) { message.matches("/^id: (.*)\n(content-type: (.*)\n)?\n/m"); } /* @Override public void onFragment( Framedata fragment ) { System.out.println( "received fragment: " + new String( fragment.getPayloadData().array() ) ); }*/ @Override public void onClose( int code, String reason, boolean remote ) { // The codecodes are documented in class org.java_websocket.framing.CloseFrame System.out.println( "Connection closed by " + ( remote ? "remote peer" : "us" ) ); } @Override public void onError( Exception ex ) { ex.printStackTrace(); // if the error is fatal then onClose will be called additionally }}
3.创建webSocketClient实例,并重写方法
/** * 创建websocket连接 */ private void createWebSocket() { xzMsgClient = new XZMsgClient(uri) { @Override public void onOpen(ServerHandshake handshakedata) { super.onOpen(handshakedata); Log.i("Websocket", "Opened"); if (mUser != null) { String messageContent = "欢迎 " + mUser.usernickname + " 进入直播间"; String msg = getJsonMessage(messageContent, Enter_OR_LEAVE, "", "1"); xzClientSendMessage(msg); } } @Override public void onMessage(String message) { super.onMessage(message); Log.e(TAG, "onMessage: 收到新消息 " + message); mHandler.post(new Runnable() { @Override public void run() { //处理消息 dealMessage(message); } }); } @Override public void onClose(int code, String reason, boolean remote) { super.onClose(code, reason, remote); Log.i("Websocket", "Closed " + reason); } @Override public void onError(Exception ex) { super.onError(ex); Log.i("Websocket", "Error " + ex.getMessage()); } }; xzMsgClient.connect(); }
4.简单说明
- 服务器:后台使用nchan搭建聊天服务器,同时会提供一个地址给客户端,即uri,客户端创建webSocketClient时将其作为参数传入;
- uri:websocket协议的uri是将开头的 http换成ws,否则无法连接到聊天服务器;
- 创建webSocketClient实例后,会调用connect(),连接成功后,才会调用onOpen(),此时进入直播间;
进入直播后,即可调用sendMsg()来发送消息,为保证严谨性,可在发送消息前确定连接成功,
xzMsgClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)
聊天界面销毁时,将webSocket连接断开即可
参考文章:
1.Java-WebSocket
2.websocket实现android消息推送
3.Android中脱离WebView使用WebSocket实现群聊和推送功能
1 0
- java_webSocket实现android消息推送
- Android Java_WebSocket实现与后台聊天通讯
- android消息推送实现
- Android百度云推送实现消息推送
- android中实现消息推送
- android中实现消息推送
- Android之消息推送实现
- Android之消息推送实现
- Android C2DM 实现消息推送
- android中实现消息推送
- Android之消息推送实现
- Android之消息推送实现
- android中实现消息推送
- Android之消息推送实现
- Android之消息推送实现
- websocket实现android消息推送
- Android之消息推送实现
- android中实现消息推送
- 《如何高效学习》读书笔记
- 看一遍就会明白的动态生成静态页面(C#)
- symfony2学习资料
- plsql developer如何查询SQL语句执行历史记录
- Linux基金会迎来了JavaScript社区
- java_webSocket实现android消息推送
- 第九周项目6—稀疏矩阵相加
- iOS 如何实现Aspect Oriented Programming (上)
- Linux awk命令详解
- linux配置安装curl
- Android中程序与Service交互的方式——交互方式
- RecyclerView实现点击和长按事件的监听方法
- 单位冲激函数(图)
- Otto进行事件分发(Activity 与Activity与Fragment之间传递数据)