【问题标题】:How TCP server knows where to send message? (client A or client B?)TCP 服务器如何知道将消息发送到哪里? (客户 A 还是客户 B?)
【发布时间】:2019-11-11 18:21:29
【问题描述】:
  • 已实现 Tcp 服务器
  • 已实现 TCP 客户端

服务器启动

客户端 A 连接

客户端 B 连接

客户端 C 连接

客户端 A 向服务器发送消息(但他想发送给客户端 B 或 C 或所有客户端)

例如:比方说……

服务器需要将此消息发送给客户端B

How client A will send the message so that server will know that A want to 
send this message to B or C etc..

客户端 A 是否应该连同消息一起发送 ID 让我们说客户端 B 以便服务器提取 ID 并在不知何故知道会将该消息转发给客户端 B 之后?

..或者我认为聊天应用程序的工作方式完全错误?

每个客户端也应该作为服务器工作吗?当客户想与客户 B 交谈时,同样的逻辑适用吗?

我在网上搜索了一些示例,但大部分都依赖于简单的服务器和一个客户端。

我不需要代码,我只需要想法,这样我就可以理解它是如何工作的。

任何帮助表示赞赏,谢谢!

【问题讨论】:

  • 客户端不直接向其他客户端发送数据,他们将数据发送到服务器,服务器负责将数据传递给预期的目标。对于公共聊天室,目标是“除了向我发送数据的客户之外的所有其他客户”。但是,我不确定你在问什么。
  • 为了将来参考,StackOverflow 的存在是为了帮助现有代码。如果您说“我不需要代码”,那么您将问题发布到了错误的论坛。您在谈论的是客户端-服务器架构和对等架构之间的区别。客户端-服务器更容易。是的,您将在客户请求中包含有关预期收件人的信息。服务器没有其他方法可以确定将消息转发到哪个客户端。
  • 您需要自己实现一些逻辑才能知道将消息路由到哪里。来自客户端的消息数据将需要包含标识预期收件人的内容,服务器可以使用这些内容来决定下一步将其发送到哪里。就像您发送电子邮件或寄信一样。当然,您还可以包括创建群聊的功能,从而将消息发送给多个收件人。所以是的,你的想法基本上是正确的
  • "每个客户端也应该作为服务器工作吗?"这介于点对点或将每个客户端作为故障转移服务器之间。但通常客户端不适合充当服务器。在考虑任何花哨的东西之前,先尝试一个基本的客户端-服务器。
  • 一般每个客户端都有一个SessionID。他们在每次请求时都会发送一些东西,以解决整个事情的无国籍状态。 Cookie 是 SessionID 的常见示例。根据具体情况,您可能需要一个用于登录的用户 ID。在这种情况下,只发布用户 ID。将这些 ID 转换为人类可读的名称是客户端 UI 的工作,反之亦然。您只能使用会话或更好的用户 ID。

标签: c# vb.net chat tcpclient tcpserver


【解决方案1】:

查看https://github.com/microsoft/Build-Mobile-App-with-Chat/blob/master/02%20Tutorial%20Guide.md

有用于非 TCP 聊天的代码和逻辑,使用服务器推送技术和服务总线来接受消息并传递它们。

对于 TCP,同样的原则适用。接收关于某个主题的消息,将其添加到某个队列或某个主题(更适合多人聊天室),然后从后台作业发送给对该主题感兴趣的所有人。

您当然需要某种持久层来存储消息并跟踪传递、历史、喜欢和排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 2017-05-03
    • 2018-09-17
    • 1970-01-01
    • 2014-09-08
    • 2019-12-06
    • 2018-02-26
    相关资源
    最近更新 更多