7

我有一个学校项目,我必须在其中实现一个聊天应用程序,其服务器将是一个 java web 服务。

问题是我一直认为 Web 服务是一种调用远程函数的方式,我不知道如何在 Web 服务上保持“会话”处于活动状态,也不知道如何跟踪当前在聊天室等

4

4 回答 4

7

据我所知,聊天服务器应该在初始连接后了解其客户端,并将每条客户端消息发送给所有客户端。这肯定需要某种会话维护。我认为正确的方法如下:

  1. 客户端调用 Web 服务“握手”并提供一些最低限度的识别细节。
  2. 服务器返回包含唯一客户端标识符的确认。
  3. 客户端调用 Web 服务“消息”并发送一条新消息及其标识符。
  4. 服务器通过标识符识别客户端,将消息分发给所有客户端。

我不太确定消息分发应该如何工作,因为 Web 服务本质上是一种拉式服务,而不是推送。也许客户端应该公开自己的 Web 服务以供服务器调用。

希望这可以帮助,

尤瓦尔=8-)

于 2009-05-24T08:47:55.047 回答
1

您可以考虑实施COMET解决方案。这将有效地为您提供推送通信,从而消除延迟,这是聊天应用程序的一个非常好的功能。

如果您想获得金牌,请考虑实施更高级的功能:

  • 拼写检查
  • URL/电子邮件地址自动转换为链接
  • 独立的聊天室
  • 主持人功能(终止聊天,踢用户)
  • 诸如“用户正在输入...”之类的事件信息
  • 状态(可用、忙碌、离开……)
  • 头像
  • ...
于 2009-05-24T11:59:42.537 回答
0

我不知道 Java,所以这个答案与语言无关。

在我看来,不在服务器上运行进程的最简单方法是将所有数据存储在数据库中。

以下是需要完成的基本事项的简短列表:

  1. 需要一个包含用户和密码列表的表以进行身份​​验证
  2. 需要当前登录使用的表
    A. 需要最后一个联系人的时间戳字段
  3. 当用户执行某项操作时,将最后一个联系人字段更新为当前时间
  4. 如果用户的最后联系时间 > 当前时间 + 2 分钟,则他们将被注销
  5. 客户端应用程序需要定期向服务器发送消息以说“我还在这里”
  6. 您需要找到一种方法来确定何时发送消息以及何时更新客户端显示已收到消息,我将留给您。

如果您仍然需要一些帮助,这里有一个 AJAX/ASP.Net 聊天应用程序,它应该(我没有查看它的源代码)以几乎相同的方式工作。

于 2009-05-24T08:34:27.320 回答
0

我编写了一个聊天引擎,它在后台有一个服务,所有内容都存储在数据库中,一个输入表单框架和一个接收 html 流的输出框架。

如果您想跳过服务部分并仅通过 Web 服务实现,您需要实现至少两个操作:发布输入和 GetLatestChanges 接收聊天输出,使用一些 Javascript 魔法将其转换为 HTML。

当然,您需要跟踪房间、用户、消息、哪个用户收到哪些文本等,正如 Unknwntech 所描绘的那样。

于 2009-05-24T11:21:26.953 回答