【问题标题】:Implementing a chat server as a WebService将聊天服务器实现为 WebService
【发布时间】:2010-10-28 13:09:10
【问题描述】:

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

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

【问题讨论】:

  • 但显然互联网上的语法并不重要,只要传达意思即可
  • 语法非常重要,无论你走到哪里。
  • 这对作家来说很重要:),但互联网就是为了交流。
  • 那应该是“下次你看到你的英语老师给他/她看你原始问题的副本时。欢迎来到 StackOverflow。”
  • “语法非常重要,无论你走到哪里。”是对逗号的误用。要么去掉逗号,要么改写为“无论走到哪里,语法都非常重要。”

标签: java web-services chat


【解决方案1】:

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

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

以下是需要完成的基本工作的简短列表:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    希望这会有所帮助,

    尤瓦尔=8-)

    【讨论】:

    • “客户”可能需要提取新消息,这可以通过与我建议的“心跳”相同的方法来完成。
    • 这也可以工作......虽然维护每条消息的状态是昂贵的。服务器每次都可以发送整个消息日志,但这对客户端来说代价高昂(更不用说阻塞网络)。
    • 这几乎就是我们最终所做的。客户端对 Web 服务的 3 次主要调用 - 注册(提交我的信息)、发送消息并拉取所有等待我的消息。我们将消息保存为链表的哈希表,其中哈希表的键是消息正在等待的用户,值是消息列表。这个项目的主要教训是 WebService 技术最不适合这种事情。感谢所有回复。
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

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

      • 拼写检查
      • 网址/电子邮件地址自动转换为链接
      • 单独的聊天室
      • 版主功能(终止聊天、踢出用户)
      • 诸如“用户正在输入...”之类的事件信息
      • 状态(有空、忙碌、离开...)
      • 头像
      • ...

      【讨论】:

        猜你喜欢
        • 2014-06-08
        • 1970-01-01
        • 1970-01-01
        • 2015-01-26
        • 1970-01-01
        • 2017-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多