针对同一个客户端,MINA怎么可以同时开启多个线程以不同的频率发送多种消息呢?
我的项目要求在客户端连接到服务器的时候,就会时时的给他每秒一次的推送数据,还有其他的数据有的是5秒一次,有的是1分一次。我试着自己建了多个线程传入ISsession 发送数据 总是报错。如果只开启一个线程就正常。
下面是hander中的代码:
@Override public void sessionOpened(IoSession session) throws Exception { System.out.println("【server】sessionOpened ID:" + session.getId()); if (allIoSessions == null) { allIoSessions = session.getService().getManagedSessions(); } System.out.println("有人连接,当前客户数:" + allIoSessions.size()); new Thread(new AllPoliceCoordsThread(session, service)).start(); new Thread(new HotPoliceCoordsThread(session, service)).start(); new Thread(new UserCoordsThread(session, service)).start(); }
注释掉两个线程的话,只留一个(1秒发一次)就正常了。可是如果把频率改成1毫秒一次。就算一个线程也要不停地报错
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
这样应该可以吧!
为了解决服务端主动持续的多线程的向同一个Iosession(客户端)发送消息
时隔一年再看这个问题 感触良多
这个同步锁怎么加啊?发出消息都是session直接调用的write
回复
你都用多线程了...不知道怎么同步?IOSession没说是线程安全的吧..
回复
如果是我自己的方法我加个锁没问题,可是发送消息的IOSession 是引用包里的。获得它的地方是通过重写别人的方法,得到的
回复
那三个线程难道不是你写的?直接锁住IoSession这个对象不就行了
handler的完整代码。结果很惨,同时在多个线程里收发消息就会出现消息错乱了
增加一个队列,多线程产生的消息都先入队