我是靠谱客的博主 务实小馒头,最近开发中收集的这篇文章主要介绍php socket 点对点聊天,Netty傻瓜教程(六):开始点对点聊天吧,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

首先Netty服务器收到了消息:

@Override

public void channelRead(final ChannelHandlerContext ctx, Object msg)

throws Exception {

// message 解析

Message receiveMsg = (Message) msg;

// 相应的Handler

AppMsgHandler msgHandler = AppMsgHandlerFactory

.getAppMsgHandler(receiveMsg);

if (msgHandler != null) {

msgHandler.process(ctx.channel(), receiveMsg);

} else {

// 没找到相应的handler

Log.error("no handler,msg2:" + receiveMsg.toString());

}

}

1. AppMsgHandlerFactory.getAppMsgHandler(receveMsg),获取处理特定消息类型的Handler,比如识别是登陆信息,还是单聊信息,还是心跳信息,或是心跳应答等等。如果不为空,则对消息进行处理,调用msgHandler.process(ctx.channel(), receiveMsg),这里传入两个参数,ctx.channel()就是标识每个会话的通道。

如果收到的是登陆信息:

@Override

public void process(Channel channel, Message msg) {

try {

LoginInfo loginInfo = msg.getLoginInfo();

long userId = loginInfo.getUserId();

String token = loginInfo.getToken();

String platform = loginInfo.getPlatform().toLowerCase();

String appVersion = loginInfo.getAppVersion();

Log.info(LogTAGManager.CLIENT_LOGIN_INFO + "userId:" + userId

+ LogTAGManager.LOG_SEPARATE_PARAMS + "token:" + token

+ LogTAGManager.LOG_SEPARATE_PARAMS + "platform:"

+ platform + LogTAGManager.LOG_SEPARATE_PARAMS

+ "appversion:" + appVersion);

// token验证

String user_token = RedisDBProvider.getUserInfo(userId,

"user_token");

if ((user_token == null || "".equals(user_token) || (!user_token

.equals(token)))) {

int code = 1;

String info = "登录验证失败";

int expose = 1;

AppRouterManager

.routeError(channel, code, info, expose, userId);

channel.close();

return;

}

登陆成功之后,如果客户端又发来了聊天信息,那么识别信息的toUserId,从数据库里面查一下此用户有没有登陆,如果已经登陆,那么调用SendMsg(channel, toUserId)即可。

最后

以上就是务实小馒头为你收集整理的php socket 点对点聊天,Netty傻瓜教程(六):开始点对点聊天吧的全部内容,希望文章能够帮你解决php socket 点对点聊天,Netty傻瓜教程(六):开始点对点聊天吧所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部