使用 maven(Struts2 网站)设置一个基本的 Struts2 应用程序。
添加弹簧插件。
创建一个服务对象,它将保存聊天消息的日志 (List<Map<int, String>>)。添加的每条消息都会向列表中添加一个新地图,其索引比之前提交的消息大 1。如果列表达到一定大小,则删除最低消息以保持最大大小。 (有更好的数据结构,但你可以弄清楚)。
添加 Struts2-JSON 插件。
创建两个 json 动作(阅读如何使用 Struts2-JSON-plugin)。 SendMessage 和 GetMessagesSince 操作。还要创建一个基本操作来创建聊天页面(我也会使用约定插件)。
SendMessage 将有一个消息设置器。为 Status 设置一个 getter 是个好主意(返回“成功”或“失败”)。
GetMessagesSince 有一个用于消息的 getter,它将返回一个 {int, Strings} 列表。它将有一个用于 lastMessage(int) 的设置器。
现在是网页。此时只需使用短轮询(在短暂休息后循环调用)来获取大于“lastMessage”的消息(将从零开始)。使用 jQuery 魔法,您将从 GetMessagesSince 获得响应(这将启动聊天客户端并带有一点历史记录,如果有的话)您将使用列表中的最后一条消息来导出 GetMessagesSince 的新值。
现在通过一些并发魔法,您可以实现长轮询。您还可以在消息中添加日期,以便人们知道对话的时间。您还可以通过创建聊天队列的地图来添加不同的消息组,即:Map<String, List<Map<int, String>>> 在这种情况下我选择了字符串来标识您的聊天室。
如果你是认真的,我什至可以创建一个演示(这比听起来容易)。