android 长连接库

概述

一直都想写些什么,刚好这两年一直都在做聊天app,想了很久决定把底层网络库开源出来。两年来这个库经历了好几个阶段:

  • java实现,BIO连接
  • java实现,NIO连接
  • c/c++实现,NIO连接

本次要开源出来的是c/c++实现的版本,取名fastsocks,github地址:

fastsock参考了Telegram的部分实现,如果对大家对Telegram还不熟悉,可以去它的官网 逛逛。

长连接必然要涉及到序列化/反序列化、数据包收发、重连、动态ip/port切换、推送等内容,接下来都将逐一介绍。

开发环境

新版本的android studio已经支持ndk开发,并且加入了cmake 的支持,如果大家对cmake还不熟悉,请查看官网。下面是我的开发环境:

android studio版本 gradle版本 ndk版本
2.3.1 2.2.3 14.1

fastscoks使用cmake编译c/c++代码,开发之前先安装好cmake插件,当然了为了方便调试c/c++代码,最好是把LLDB也安装好。

使用

和大多数sdk一样,fastsocks启动起来需要一些配置,可以参考fastsocks-simple的相关代码,所有对fastsocks的操作都在一个java类里面:

com.me.fastsocks.tcp.ConnectionsManager

初始化

主要是设置应用层和底层库的监听PacketDispatcherDelegate,并且调用注册相关jni函数。有时候我们会遇到c/c++的crash,底层库如果崩溃会将崩溃文件保存至crashPath。

void init(PacketDispatcherDelegate dispatcherDelegate, 
                 Context context,String crashPath);
breakpad

安卓c/c++崩溃定位比较困难,借助breakpad相关工具定位崩溃会简单很多。breakpad本身就跨平台并且支持android移植,项目里已经有编译好的.a库,fastsocks使用关联静态库的方式使用breakpad
定位崩溃需要的工具也需要自己手动编译,github地址:

这里需要注意:必须在Linux环境下才能编译和使用,如果大家没有Linux环境可以装个VMware,添加个ubuntu虚拟机,至于怎么定位崩溃这里就不赘述了,网上很多这样的教程。

启动和销毁

一般都在登录成功之后启动服务,注销登录的时候销毁服务,参考:

com.me.fastsocks.utils.StartUtils

启动服务

启动服务的时候需要将userId设置到底层库,这里我们使用long类型标示一个用户,当然了如果大家的userId不是long类型的,可以修改相应的实现。

void startSdkService(
  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 在Android中实现WebSocket连接,可以通过以下步骤来实现: 1. 导入WebSocket:首先,需要在Android项目的build.gradle文件中添加WebSocket的依赖项。例如,在dependencies块中添加以下代码: ```java implementation 'org.java-websocket:Java-WebSocket:1.5.1' ``` 2. 创建WebSocket客户端:在需要使用WebSocket连接的地方,创建一个WebSocket客户端对象。例如,可以在Activity或Fragment中创建WebSocketClient对象。 ```java WebSocketClient mWebSocketClient = new WebSocketClient(URI.create("ws://your_server_url"), new Draft_17()) { // WebSocket事件回调方法 @Override public void onOpen(ServerHandshake serverHandshake) { // 连接成功后的处理逻辑 } @Override public void onMessage(String message) { // 接收到服务器发送的消息时的处理逻辑 } @Override public void onClose(int code, String reason, boolean remote) { // 连接关闭时的处理逻辑 } @Override public void onError(Exception ex) { // 连接发生错误时的处理逻辑 } }; ``` 3. 连接WebSocket服务器:调用WebSocketClient对象的connect()方法来连接WebSocket服务器。 ```java mWebSocketClient.connect(); ``` 4. 发送和接收消息:可以使用WebSocketClient对象的send()方法发送消息,并在onMessage()方法中接收服务器发送的消息。 ```java mWebSocketClient.send("Hello, Server!"); ``` 5. 关闭WebSocket连接:当不再需要连接时,可以调用WebSocketClient对象的close()方法来关闭WebSocket连接。 ```java mWebSocketClient.close(); ``` 注意:以上代码只是简单示例,实际使用时可能需要根据具体需求进行适当的改进和处理,例如添加重连机制、处理心跳包等。 ### 回答2: Android实现WebSocket连接可以使用Java开发,具体步骤如下: 1. 引入相应的WebSocket依赖,如Java-WebSocket。 2. 创建一个WebSocket连接类,继承自WebSocketClient类,并实现其中的各个回调方法。 3. 在连接类中,重写onOpen()方法,在该方法中进行WebSocket连接的初始化和握手操作。 4. 重写onMessage()方法,用于接收服务器发送的消息,可以在此方法中处理收到的消息。 5. 重写onClose()方法,处理WebSocket连接关闭的逻辑。 6. 重写onError()方法,处理WebSocket连接发生错误的逻辑。 7. 在需要使用WebSocket连接的地方,创建WebSocket连接对象,传入服务器的WebSocket地址和端口号等参数。 8. 调用WebSocket连接对象的connect()方法,发起WebSocket连接。 9. 可以通过WebSocket连接对象的send()方法发送消息给服务器。 10. 在连接不需要时,调用WebSocket连接对象的close()方法关闭WebSocket连接。 总结:通过引入相应的WebSocket依赖,并创建WebSocket连接类来实现WebSocket连接,可以实现Android应用与服务端的实时通讯。在连接的各个回调方法中,可以处理接收到的消息和连接关闭等事件。使用WebSocket连接对象的connect()方法发起连接,send()方法发送消息,close()方法关闭连接

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值