1

我有一个关于 Java 和网络的有趣问题。

我正在创建一个基本的聊天程序,仅用于学习目的。现在,我之前已经将客户端正确连接到服务器并来回发送文本。这完全没问题。但是我遇到了一个问题。

假设我在某处的远程服务器上有一个数据库。该数据库将包含即时通讯程序的登录信息、联系人列表信息等。这意味着当客户端执行某些操作时,我将需要对数据库执行查询。显然我知道客户端不应该包含连接字符串或对数据库有任何访问权限。

我的问题是:拥有一个用于与多个潜在客户聊天的客户端-服务器架构的最佳方式是什么,同时还有一种通过网络发送数据以便可以在服务器端进行查询的方法?

这可能是一个简单的答案,但由于某种原因,我无法将头绕在同时发送数据的多个套接字/服务器套接字上。

谢谢。

4

3 回答 3

1

一种解决方案是设置 tomcat 并使用 java servlet,尽管这在技术上是 http 请求。

听起来你需要写一个服务器。我认为您所有的聊天都可以在服务器上进行,因此它不是p2p架构,而是集线器式架构。这样,您的服务器就可以代表客户端访问数据库。

我希望这能回答你的问题,在网络编程方面有一百万种不同的方法:)

根据评论的示例 XML 消息:

<XML>
<msg_header type="chat"/>
<msg_body>
   hello world
</msg_body>
</XML>

<XML>
<msg_header type="query"/>
<msg_body>
   SELECT * FROM myTable
</msg_body>
</XML>

如果你不想,你甚至不必那么复杂。或者,您可以采用广泛使用的标准,例如 HTTP(使用 TCP/IP 并使用套接字)——这样您就可以使用 Java 的内置 http 处理器之一来完成工作。由你决定 :)

于 2012-08-20T15:08:18.533 回答
0

前段时间我和你一样使用 TCP 连接(主要在游戏和聊天应用程序中),但在我看来,它不太适合你的要求,除了游戏。我非常喜欢webservices atm。它们通过 HTTP 而不是 TCP 进行通信,并使用 GET、POST 和 PUT 方法来确认您尝试执行的操作。自己建立一个正在运行的 java web 服务并尝试一下非常简单。尝试将 XML 或 Json 与它一起用于您的应用程序。

关于球衣网络服务的精彩教程:http ://www.vogella.com/articles/REST/article.html#

稍后当您掌握它时,您可以像平常一样轻松地将数据库连接与您的 Web 服务绑定。

祝你好运!

于 2012-08-20T15:11:17.640 回答
0

您可以在此处采用多种方法:

  1. 如果您为每个客户端使用一个专用的服务器端线程,该线程将执行所需的数据库查询。客户端传入初始登录信息等;在验证这些之后,处理程序线程可以发回联系人列表和客户端所需的其他信息。

  2. 另一种方法是没有专用线程。相反,当客户端进行身份验证时,创建某种令牌对象并将其传递给客户端。每次客户端发送消息时,它都会发送令牌。服务器上接收消息+令牌的任何线程都可以通过检查令牌来验证客户端。

这里没有一个正确的答案;如果您想进一步探索,我建议您查看一些流行的聊天实现的架构,例如 IRC 和 jabber。

于 2012-08-20T15:11:48.843 回答