使用Java的Mina框架可以轻松开发及时通信软件的后端. 对于前端开发,如果要实现跨平台,可以使用PhoneGap或Unity3D. 现在
Unity3D非常有名,微软即将推出的HoloLens虚拟现实眼镜将使用Unity开发3D应用程序.
我的队友@王选易刚刚完成了一个项目“ Mini WeChat”,该项目已在Github上开源,并且该主题可以在必要时进行检查:
后端门户MrNerverDie / MiniWeChat-Server·GitHub
前门户网站MrNerverDie / MiniWeChat-Client·GitHub
后端技术博客: 基于MINA,Hibernatye,Spring,Protobuf的[mini WeChat]即时聊天系统: 1.技术介绍的Mina连接
----------------------------无聊的分隔线---------------- -----------------------------
让我们先谈技术方面
在网络连接上: 个人建议使用长连接,因为在聊天过程中,如果使用短链接,则需要使用轮询来查看是否存在未收到的消息,这也会导致发送和接收
消息的延迟.
在框架上: mina为您封装了许多网络层处理,易于使用,尤其是使用各种过滤器,例如ProtocolCodecFilter可以在发送和接收数据包的过程中用于封装解码
编码甚至是棘手的粘性数据包问题,也就是说,外部使用网络传输似乎可以直接将Java对象发送和接收到对面以及LoggingFilter(可以用来发送)并接收数据包
登录过程,即输出日志,以查询程序异常.
Spring是用于依赖项注入的框架. 它可以与Mina紧密集成. 就Spring本身而言,依赖注入可以处理许多单例问题. Spring创建并注入参数进行管理
不仅优化了编程过程,而且实现了可配置的编程.
Hibernate可以在MySQL中使用. 它将MySQL复杂且容易出错的SQL语句转换为接口调用. 它还将MySQL的关系转换为易于程序员理解的对象类型.
您只需要修改Java中的类,然后在Hibernate中执行Update,就可以自动更新数据.
Protobuf是定义网络传输协议的一种非常有效的方法. 它使用中间语言来定义网络传输中各种语言对象的编码方法. 您可以一次编写
Protobuf,编译后可在多种语言中使用,这样可以减少用不同语言编写的时间和精力以及减少编写错误的可能性(例如两种语言的对齐方式),可以更改协议
双方必要的类在协商时会快速编译. 甚至可以解决不同语言中变量的差异.
Log4J是Java中使用的Log工具. 它具有许,可以快速灵活地解决日志输出问题.
----------------------------无聊的分隔线---------------- -----------------------------
由于前端的可变性更大,并且要求可能相差很大,因此我将讨论后端的构造. 只要设置了后端的接口,就可以应用各种前端.
让我们首先讨论后端架构. MVC体系结构更多地用于前端或网页. 我在后端使用MVC分层体系结构作为参考.
首先,有一个Server类来启动整个后端服务器. 您可以使用Server调用Spring的启动来创建和实例化并注入所有单例类,然后将其注入关键的两个类
ServerModel和ServerNetwork已初始化.
ServerModel用于存储后端的主要数据和一些主要方法(例如,已连接的用户表(最好使用HashTable进行存储),及其访问以及心跳包的发送(每个
每隔一段时间发送一次心跳数据包,以通过成功发送来验证客户端是否仍处于状态.
ServerNetwork是服务器后端的网络连接器,负责处理所有网络事件,例如网络连接的打开,发送,接收,关闭等. 上面提到的过滤器已添加到
在ServerNetwork中,编码和接收数据包的过程被完全封装.
让我们谈谈请求的处理. 首先,ServerNetwork将接收来自客户端的请求,然后通过Mina的Decoder Filter对其进行解码,然后将请求对返回到逻辑层
同样,逻辑层是第一个请求分配器. 分发程序根据请求的类型将请求对象分发到每个单例处理器. 单例处理器对其进行处理后,将结果封装到Protobuf中.
ServerNetwork返回到客户端.
----------------------------无聊的分隔线---------------- -----------------------------
让我说说聊天系统要处理的一些细节:
首先,每个连接器的信息都需要存储在服务器端. 最好使用HashTable进行存储以便于搜索. 存储内容包括一系列信息,例如会话和登录状态.
互相发送消息时,需要验证收件人是否. 如果您,则可以直接发送. 如果您不,则需要将其存储在内存中. 一旦将主题存储在内存中,您可能还需要考虑该主题
当数据太多时搭建服务器有什么用,需要将数据存储在外部存储器中. 另外,用户每次登录时,都需要检查是否有未收到的消息.
还有一个日志输出问题. 在大型项目中搭建服务器有什么用,尤其是在涉及网络模块时,总是很难发现错误. 通常无法分辨服务器是否有问题或客户端有问题,因此最好
每个关键点都有一个日志. 我建议主题使用Log4J,它可以直接输出到文件中,并且可以根据需要关闭某些日志.
----------------------------无聊的分隔线---------------- -----------------------------
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-231428-1.html
现在人们买白菜都挑有虫子的
那块地丢了就等于把极其重要的战略要塞拱手让给战略对手
没有申请就闯进中国被侵略者侵犯国土