我们做的im已经到了第二版了
简单说,技术关键在于建立一个长连接,然后允许服务器能够将消息主动发送到flutter端
从这一点上说,reactive programming非常重要,所以vert.x天然适合做这种应用的服务器
vert.x有net server,用flutter的socket建立起连接之后,vert.x将连接放入一个map,然后消息过来的时候,从map中找到对应的socket,再将消息写入便可
一般的http server/web server是建立在http也就是一问一答式的请求-响应模式上的,做im不合适,做游戏服也不合适,相比之下vert.x做这个就非常得心应手,而且reactive的listener和request这些可以用eventloop来处理掉并发冲突和lock,开发起来就非常快了
flutter那边,http和tcp混用,请求基本上用http client完成,同时flutter也有reactive programming,在socket上挂一个listener,对于服务器发过来的消息,挂上一个listener处理,flutter跟vert.x一样,flutter有ui runner,其实就是一个ui thread,ui thread也是一个loop,要不停滴刷新页面,这一点上说跟vert.x的eventloop是一样的,还有游戏的gameloop,也是如此,所以这几个并发的模式几乎是一样的,那flutter也跟vert.x一样,帮你解决掉了并发问题,用loop,所以你不需要手动加lock之类的,它能搞定,那flutter收到消息之后,处理完成,再手动调用set state方法将状态更新一下,就能看到结果了
我们的im demo接近完成,但是第二版还有些细节需要处理,有兴趣的可以看源码
目前fllutter的第一版和第二版的源码混在一起,回头我把第一版的源码给删了,然后再release一个apk,但是需要点时间