首页 > 编程知识 正文

三分钟即时聊天,android下载更新

时间:2023-05-03 17:13:47 阅读:111940 作者:3730

安卓即时聊天简介:本文介绍了如何实现安卓软件用户之间的即时聊天。 1、WebSocket WebSocket介绍websocket是一种可以通过一个TCP连接进行全双工通信的网络传输协议,位于OSI模型的APP应用层。 WebSocket协议于2011年由IETF标准化为RFC 6455,然后由RFC 7936补充了规范。 Web IDL的WebSocket API由W3C标准化。

WebSocket简化了客户端和服务器之间的数据交换,使服务端能够主动将数据推送至客户端。 在WebSocket API中,浏览器和服务器只需要完成一次握手,就可以在两者之间创建持久连接并进行双向数据传输。

简单来说,web套接字可以双向连接,服务可以主动向客户端推送消息。 当客户端连接到服务器且其他客户端也连接到服务器时,服务器可以连接到两个客户端,并且两个客户端可以实时通信。

当然,这并不是真正建立连接。 两个客户端之间的通信是通过服务器这一桥梁实现的。 客户端发送消息时,携带客户端的id和希望建立通信的对方的id保存在Session中,当某个id的客户端发送消息时,服务器会主动推送至目标客户端,实现实时通信

2服务器端代码2.1配置文件websocketconfigimportorg.spring framework.context.annotation.bean; importorg.spring framework.context.annotation.configuration; importorg.spring framework.web.socket.server.standard.serverendpointexporter; /** * @author怒骂权* @版本1.0 * @ date 2021/3/1115336045 */@ configurationpublicclasswebsocketconfig { @ beanpublicserverendpointexporterserverendpointexporter ({ returnewserverendporendporter {returnnewserverendporter} }} 2.2与客户端建立连接importorg.spring framework.stereotype.com ponent; import javax.websocket.OnClose; 导入javax.web socket.on message; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.web socket.server.path param; import javax.web socket.server.server endpoint; import java.io.IOException; /** * @author吼权* @ version 1.0 * @ date 2021/3/1115336047 *//ws ://localhost 33608848/web socket/a @ serset 与客户端的连接会话要求通过该会话向客户端发送数据专用会话会话; /**成功调用连接建立的方法*//@ onopenpublicvoidonopen (session session,@pathparam('userid ' ) String userId ) )//获取的参数} /** *关闭连接*/@ onclosepublicvoidonclose (session session ) throwsioexception (session pool.close ) session.getid ) } /** *如何接收和调用客户端的消息* * @param message客户端的消息* @ param session */@ onmessagepublicvoidonmessage (straram message }} 2.3新的SessionPool向客户端import com.Alibaba.fast JSON.JSON发送消息; import com.a

libaba.fastjson.JSONObject;import com.ntu.treatment.service.Impl.UserServiceImpl;import com.ntu.treatment.utils.SpringUtil;import javax.websocket.Session;import java.io.IOException;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;/** * @author 吼吼权 * @version 1.0 * @date 2021/3/11 15:57 */public class SessionPool { public static Map<String, Session> sessions = new ConcurrentHashMap<>(); public static void close(String sessionId) throws IOException { for (String userId : SessionPool.sessions.keySet()) { Session session = SessionPool.sessions.get(userId); if (session.getId().equals(sessionId)){ sessions.remove(userId); break; } } } public static void sendMessage(String message) { session.getAsyncRemote().sendText(message); }}

这里如果要实现发送消息到某一个客户端,那么你要重写sendMessage()这个函数,并且在代码中加入 Session session = sessions.get(toUserIds);
toUserIds是你要发送的客户端的id。如下:

public static void sendMessage(String message) { String toUserIds = *****; Session session = sessions.get(toUserIds); session.getAsyncRemote().sendText(message); }

即可发送消息至目标客户端。

3、客户端代码

安卓端连接服务器的url为:ws://10.8.113.79:8848/websocket/id
ws为websocket的协议。
安卓端代码就不完全展示了,后面将会把完整项目代码的GitHub地址放在底部。

首先连接服务器 /** * 初始化websocket连接 */ private void initSocketClient() { URI uri = URI.create(Util.ws); client = new JWebSocketClient(uri) { @Override public void onMessage(String message) { Log.e("JWebSocketClientService", "收到的消息:" + message); Intent intent = new Intent(); intent.setAction("com.xch.servicecallback.content"); intent.putExtra("message", message); sendBroadcast(intent); checkLockAndShowNotification(message); } @Override public void onOpen(ServerHandshake handshakedata) { super.onOpen(handshakedata); Log.e("JWebSocketClientService", "websocket连接成功"); } }; connect(); } /** * 连接websocket */ private void connect() { new Thread() { @Override public void run() { try { //connectBlocking多出一个等待操作,会先连接再发送,否则未连接发送会报错 client.connectBlocking(); } catch (InterruptedException e) { e.printStackTrace(); } } }.start(); }

然后发送消息

/** * 发送消息 * * @param msg */ public void sendMsg(JSONObject msg) { if (null != client) { Log.e("JWebSocketClientService", "发送的消息:" + msg); client.send(msg.toString()); } }

本篇博客主要还是以介绍和理解websocket为主,能力有限,大体就介绍到这儿,另外奉上此项目的GitHub地址,不要忘了star哦!
GitHub链接

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。