��������С���磬ԭ�⡰ʹ��DDD+Netty������һ���ֲ�ʽIM(��ʱͨ��)ϵͳ����Ϊ�������Ķ����飬��ʱͨѶ���д������Ķ�����лԭ���ߡ�
1.jpg (71.69 KB, ���ش���: 3508)
���ظ��� ���浽����
3 ��ǰ �ϴ�
Netty ��һ�� Java ��Դ���ܡ�Netty �ṩ�첽�ġ��¼�����������Ӧ�ó������ܺ��ߣ����Կ��ٿ��������ܡ��߿ɿ��Ե������������Ϳͻ��˳����� Ҳ����˵��Netty ��һ������ NIO �Ŀͻ����������˱��̿��ܣ�ʹ��Netty ����ȷ�������ٺͼĿ�����һ������Ӧ�ã�����ʵ����ij��Э���Ŀͻ���������Ӧ�á� Netty �൱������������Ӧ�õı��̿������̣����磬TCP �� UDP �� Socket ������
2.png (28.94 KB, ���ش���: 3560)
3.png (28.77 KB, ���ش���: 3453)
3-2.png (53.38 KB, ���ش���: 3335)
3-3.png (45.08 KB, ���ش���: 3521)
3-4.jpg (55.8 KB, ���ش���: 3553)
4.png (37.34 KB, ���ش���: 3542)
5.jpg (28.26 KB, ���ش���: 3519)
6.jpg (45.16 KB, ���ش���: 3427)
7.jpg (54.84 KB, ���ش���: 3522)
8.png (21.16 KB, ���ش���: 3397)
9.jpg (56.66 KB, ���ش���: 3536)
10.png (7.67 KB, ���ش���: 3479)
agreement ������ src ������ main �� ������ java �� �� ������ org.itstack.naive.chat �� �� ������ codec �� �� �� ������ ObjDecoder.java �� �� �� ������ ObjEncoder.java �� �� ������ protocol �� �� �� ������ demo �� �� �� ������ Command.java �� �� �� ������ Packet.java �� �� ������ util �� �� ������ SerializationUtil.java �� ������ resources �� �� ������ application.yml �� ������ webapp �� ������ chat �� ������ res �� ������ index.html ������ test ������ java ������ org.itstack.demo.test ������ ApiTest.java
public abstract class Packet { private final static Map<Byte, Class<? extends Packet>> packetType = new ConcurrentHashMap<>(); static { packetType.put(Command.LoginRequest, LoginRequest.class); packetType.put(Command.LoginResponse, LoginResponse.class); packetType.put(Command.MsgRequest, MsgRequest.class); packetType.put(Command.MsgResponse, MsgResponse.class); packetType.put(Command.TalkNoticeRequest, TalkNoticeRequest.class); packetType.put(Command.TalkNoticeResponse, TalkNoticeResponse.class); packetType.put(Command.SearchFriendRequest, SearchFriendRequest.class); packetType.put(Command.SearchFriendResponse, SearchFriendResponse.class); packetType.put(Command.AddFriendRequest, AddFriendRequest.class); packetType.put(Command.AddFriendResponse, AddFriendResponse.class); packetType.put(Command.DelTalkRequest, DelTalkRequest.class); packetType.put(Command.MsgGroupRequest, MsgGroupRequest.class); packetType.put(Command.MsgGroupResponse, MsgGroupResponse.class); packetType.put(Command.ReconnectRequest, ReconnectRequest.class); } public static Class<? extends Packet> get(Byte command) { return packetType.get(command); } /** * ��ȡЭ��ָ�� * * @return ����ָ��ֵ */ public abstract Byte getCommand(); }
11.jpg (57.76 KB, ���ش���: 3676)
public class AddFriendHandler extends MyBizHandler<AddFriendRequest> { public AddFriendHandler(UserService userService) { super(userService); } @Override public void channelRead(Channel channel, AddFriendRequest msg) { // 1. ���Ӻ��ѵ����ݿ���[A->B B->A] List<UserFriend> userFriendList = new ArrayList<>(); userFriendList.add(new UserFriend(msg.getUserId(), msg.getFriendId())); userFriendList.add(new UserFriend(msg.getFriendId(), msg.getUserId())); userService.addUserFriend(userFriendList); // 2. ���ͺ����������� A UserInfo userInfo = userService.queryUserInfo(msg.getFriendId()); channel.writeAndFlush(new AddFriendResponse(userInfo.getUserId(), userInfo.getUserNickName(), userInfo.getUserHead())); // 3. ���ͺ����������� B Channel friendChannel = SocketChannelUtil.getChannel(msg.getFriendId()); if (null == friendChannel) return; UserInfo friendInfo = userService.queryUserInfo(msg.getUserId()); friendChannel.writeAndFlush(new AddFriendResponse(friendInfo.getUserId(), friendInfo.getUserNickName(), friendInfo.getUserHead())); } }
12.jpg (52.94 KB, ���ش���: 3483)
public class MsgHandler extends MyBizHandler<MsgRequest> { public MsgHandler(UserService userService) { super(userService); } @Override public void channelRead(Channel channel, MsgRequest msg) { logger.info("��Ϣ��Ϣ������{}", JSON.toJSONString(msg)); // �첽д�� userService.asyncAppendChatRecord(new ChatRecordInfo(msg.getUserId(), msg.getFriendId(), msg.getMsgText(), msg.getMsgType(), msg.getMsgDate())); // ���ӶԻ���[�����Է�û�����ĶԻ���������] userService.addTalkBoxInfo(msg.getFriendId(), msg.getUserId(), Constants.TalkType.Friend.getCode()); // ��ȡ����ͨ�Źܵ� Channel friendChannel = SocketChannelUtil.getChannel(msg.getFriendId()); if (null == friendChannel) { logger.info("�û�id��{}δ��¼��", msg.getFriendId()); return; } // ������Ϣ friendChannel.writeAndFlush(new MsgResponse(msg.getUserId(), msg.getMsgText(), msg.getMsgType(), msg.getMsgDate())); } }
13.jpg (26.28 KB, ���ش���: 3452)
// Channel ״̬��ʱѲ�죻3 ����ÿ 5 ��ִ��һ�� scheduledExecutorService.scheduleAtFixedRate(() -> {while (!nettyClient.isActive()) {System.out.println("ͨ�Źܵ�Ѳ�죺ͨ�Źܵ�״̬" + nettyClient.isActive()); try {System.out.println("ͨ�Źܵ�Ѳ�죺�������� [Begin]"); Channel freshChannel = executorService.submit(nettyClient).get(); if (null == CacheUtil.userId) continue; freshChannel.writeAndFlush(new ReconnectRequest(CacheUtil.userId)); } catch (InterruptedException | ExecutionException e) {System.out.println("ͨ�Źܵ�Ѳ�죺�������� [Error]");} } }, 3, 5, TimeUnit.SECONDS);
14.png (28.16 KB, ���ش���: 3408)
��Դ����ʱͨѶ�� - ��ʱͨѶ������������
��������Դ�ƶ��˼�ʱͨѶ���ܡ�
�������� / ���� / ָ�� / ����
������Web�˼�ʱͨѶ���ܡ�
��ϸ���� / ����Դ�� / �ֲ��̳�
�ƶ���ʵʱ����Ƶ���ܡ�
��ϸ���� / ���ܲ��� / ��װ����
����MobileIMSDK���ƶ�IMϵͳ��
��ϸ���� / ��Ʒ��ͼ / ��װ����
һ�ײ�Ʒ��Web��IMϵͳ��
��ϸ���� / ��Ʒ��ͼ / ��ʾ��Ƶ
һ�״�Ѫ����NEXT��Ʒ��IMϵͳ��
��ϸ���� / ��Ʒ��ͼ / ��װ
������
��������������100����
������ְ��2�����ϵĺϸ���ʽ����
Ϊ��������ͻ�����Ŀ����ߡ������ȡ�
Copyright © 2014-2024 ��ʱͨѶ�� - ��ʱͨѶ���������� / �汾 V4.4
��������ʱ����Ϣ�Ƽ�����˾ (��ICP��16005070��-1��
Processed in 0.163076 second(s), 48 queries , Gzip On.