<p><code></p> <p>之前工作接触了几个开源的IM产品,再加上曾经用Netty实现过几个服务,于是就有了用Netty实现一个IM的想法,于是用业余时间写了一个IM,和喜欢Netty的程序员们分享。<br /><span class="img-wrap"><img data-src="/img/bVbct4L?w=1600&amp;h=794" src="/img/bVbct4L?w=1600&amp;h=794" alt="leo-im.png" title="leo-im.png" style="cursor: pointer; display: inline;"></span></p> <p>考虑到方便扩展,在服务端采用了Http+Socket结合的设计,客户端所有的请求都基于Http,如发送消息、修改个人信息等,所有的消息推送采用Socket方式即时推送到客户端,这样的设计可以在并发访问量大的情况下,将Http服务与Socket服务分开部署,减小各自的访问压力。</p> <p>Http服务也基于Netty实现,在Netty之上做了扩展,参考Spring MVC注解实现了netty-rest-server(<a href="https://github.com/lining90567/netty-rest-server" rel="nofollow noreferrer" target="_blank">netty-rest-server</a>),使用该框架,可实现注解注入REST controller,实现统一异常处理控制器和拦截器(如跨域拦截器、身份验证拦截器等)。</p> <div class="google-auto-placed ap_container" style="text-align: center; width: 100%; height: auto; clear: none;"><ins data-ad-format="auto" class="adsbygoogle adsbygoogle-noablate" data-ad-client="ca-pub-6330872677300335" data-adsbygoogle-status="done" style="display: block; margin: auto; background-color: transparent;"><ins id="aswift_4_expand" style="display: inline-table; border: none; height: 0px; margin: 0px; padding: 0px; position: relative; visibility: visible; width: 697px; background-color: transparent;"><ins id="aswift_4_anchor" style="display: block; border: none; height: 0px; margin: 0px; padding: 0px; position: relative; visibility: visible; width: 697px; background-color: transparent; overflow: hidden; opacity: 0;"><iframe width="697" height="175" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" onload="var i=this.id,s=window.google_iframe_oncopy,H=s&amp;&amp;s.handlers,h=H&amp;&amp;H[i],w=this.contentWindow,d;try{d=w.document}catch(e){}if(h&amp;&amp;d&amp;&amp;(!d.body||!d.body.firstChild)){if(h.call){setTimeout(h,0)}else if(h.match){try{h=s.upd(h,i)}catch(e){}w.location.replace(h)}}" id="aswift_4" name="aswift_4" style="left:0;position:absolute;top:0;border:0px;width:697px;height:175px;"></iframe></ins></ins></ins></div> <p>Http服务和Scoket服务之间的解耦和通讯可使用Java内置的队列或Redis发布/订阅实现,消息处理器接收到任务后,会将该任务交由线程池处理,处理后通过GroupChannel发送广播或发给指定的Channel。</p> <p>前端基于<a href="http://www.js-code.com/tag/vue" title="Vue" target="_blank">Vue</a>+Element-UI开发,建议使用Chrome浏览器体验。</p> <p>在线体验:<a href="http://123.207.147.138:8000" rel="nofollow noreferrer" target="_blank"></a><a href="http://123.207.147.138" rel="nofollow noreferrer" target="_blank">http://123.207.147.138</a>:8000</p> <p>测试用户:test1、test2、test3,口令均为:123456</p> <h2 id="articleHeader0">源码地址:</h2> <ul> <li><a href="https://github.com/lining90567/leo-im-server" rel="nofollow noreferrer" target="_blank">服务端</a></li> <li><a href="https://github.com/lining90567/leo-im-web" rel="nofollow noreferrer" target="_blank">Web端</a></li> </ul> <p></code></p>

本文固定链接: http://www.js-code.com/vue-js/vue-js_26640.html