Netty聊天室的问题

雷泡泡 发布于 2016/03/31 08:57
阅读 463
收藏 0

@啡色地带 您好,谢谢您的回答,关于聊天室的具体实现问题还想向您请教一下,希望能得到您的答复。

目的:使用Netty框架实现一个P2P的聊天室,我准备采用UDP传输(打洞)

遇到的问题:在服务器端主要是实现两个功能:1.循环接收数据,将上线用户信息保存到一个List<Map> userList=new ArrayList<Map>() 中用来存储所有的用户IP及端口。2.像其他在线的主机发送除自己之外在线用户的信息。

这两个功能应该是多线程的,我现在所想不通的是,可以将这两个功能分别写到两个handler里面吗,还是要怎么处理好呢?在客户端也遇到了同样的问题,也是不知道怎么同时处理几个多线程。

现在手上有Java实现P2P的聊天程序,但是一用到Netty框架就不会改了。或者您是否有空我给您发代码您帮忙看看具体要用Netty框架要如何使用?太谢谢了!

加载中
0
啡色地带
啡色地带
P2P的我没做过,不过你说的那个功能可以放在两个handler里面, 还有多线程问题,netty启动默认设置了1个boss线程用于接收连接,几个io线程(一般是处理器个数)用于读取数据,编码解码,  你handler估计就是在io线程里面,在客户端连接的时候channel会绑定到某个io线程中,然后该channel发收数据都通过该io线程. 你的第二个handler应该改为连接时保存新上线用户并通知所有已经连接的客户端. 接收数据不用自己去循环,估计你是写java bio程序用循环阻塞在那里等待数据, java nio采用的是select模型, 有数据来了会自己触发的, 你只需要在netty的 messageRecieve(方法名记不住了)中去读取消息就ok了,  你设计了消息格式 那就是再解码器后添加你自己的消息转发handler中读取消息并转发
雷泡泡
回复 @啡色地带 : 嗯嗯好的!非常感谢!
啡色地带
啡色地带
回复 @雷泡泡 : 应该在actionPerformed写你想执行的逻辑吧,建议你去下一个netty聊天程序
雷泡泡
其实还不是特别理解您所说的意思,要是想做一个界面的话,要想implements ActionListener的话要把actionPerformed(ActionEvent e)函数写到哪里呢?
啡色地带
啡色地带
回复 @雷泡泡 : 进入聊天室可以在连接建立那个函数里面写逻辑,如果你后面要扩展的话, 那么在mesageRecieve里面多消息分发吧,设计一个消息格式,根据消息id号做对应的处理
雷泡泡
那这两个handler之间是什么关系呢?是先执行handler1再通过handler2么?这里有点不太能理解。第一个handler改写messageRecieve(...)已经改写好了,但是您说的第二个handler是要改写什么函数么?
返回顶部
顶部