netty WebSocket群发
我在网上找了很久,发现了一个可以实现群发的ChannelGroup,但是我看代码之后发现,这个例子是把所有的socket链接都放进去群发,我现在要实现的是,多个两人之间的...
我在网上找了很久,发现了一个可以实现群发的ChannelGroup,但是我看代码之后发现,这个例子是把所有的socket链接都放进去群发,我现在要实现的是,多个两人之间的信息聊天,就是说两人之间的信息发送之后,服务器同时将信息发送给两个客户端,多个聊天之间互不影响。
展开
1个回答
展开全部
ChannelGroup里面包含了所有客户端的Channel。你要发送给谁,就把这个Channel取出来channel.write(message)就可以了。
每个Channel都有一个id,是netty自动分配好的。你要把客户端(User)和Channel关联起来。最简单的是用Map<User,Channel>或者Map<userId,channelId>,或者用观察者模式....用的时候你可以根据User的信息找出他的channel.大体思路就是这样
每个Channel都有一个id,是netty自动分配好的。你要把客户端(User)和Channel关联起来。最简单的是用Map<User,Channel>或者Map<userId,channelId>,或者用观察者模式....用的时候你可以根据User的信息找出他的channel.大体思路就是这样
追问
我也是这么想的,现在的问题是我不知道怎么取到session,然后从里面拿到user,在绑定
追答
public class YouHandler extends SimpleChannelUpstreamHandler{
Map map; //玩家id与channel对应起来
Map> chatRoom; //聊天室>
public YouHandler(Map map,Map> chatRoom){
this.map = map;
this.chatRoom = chatRoom;
}
/**
* 大致思路如下
*/
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent msg){
int channelId = ctx.getChannel().getId();//获取channleId的方法
if(msg instanceof Login){
map.put(msg.getUserId(), ctx.getChannel());
}else if(msg instanceof CreateChatRoom){
chatRoom.put(chatRoomId, new HashSet());
}else if(msg instanceof JoinChatRoom){
chatRoom.get(chatRoomId).add(msg.getUserId());
}else if(msg instanceof Chat){
for(Integer userId : chatRoom.get(chatRoomId)){
Channel ch = map.get(userId);
ch.write(msg);
}
}
}
}
摩杜云
2024-07-09 广告
2024-07-09 广告
判断一个java邮件推送公司的好坏,不只是看价格,还要考虑很多因素。建议可以多对比几个看看。您可以到摩杜云了解下。摩杜云成立于2019年,依托于公司多年技术沉淀和强大的云计算研发实力,面向全世界各个国家和地区、企业组织和个人开发者,提供全球...
点击进入详情页
本回答由摩杜云提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询