gpt4 book ai didi

c# - .Net Socket 增强以支持 ACK 和聊天?

转载 作者:行者123 更新时间:2023-12-03 12:00:26 26 4
gpt4 key购买 nike

我有一个可以处理许多多个客户端请求的服务器。

服务器使用 SocketTcpClient - 对于每个客户,它都会打开一个新线程。

每个客户端向服务器发送数据并由服务器响应。

但我如何“发送数据”:

  • 客户端:发送一个字节,表示:“我要发送数据”
  • 服务器:发送 Ok 我同意(1 个字节的 ack)
  • 客户端:发送字节数-数据长度
  • 服务器:发送 好的,我可以处理
  • 客户端:发送全部数据
  • 服务器:发送确定

  • 我也可以发送文件

    这一切都很好。

    问题

    问题来了:

    这些命令(我已经写过)是用户操作。

    现在我需要在此操作屏幕中添加聊天

    这不成问题 :

    我将打开一个新线程,该线程将始终处于“收听模式”以获取消息

    但 :

    该线程将始终监听,还将拦截来自服务器的 Ack 消息(我在上面写过)!

    我不想仅仅为了聊天而打开一个新的连接 channel 。

    即使我添加了一个响应类型(ACK 或 CHAT_MESSAGE)——这将是一个问题,因为用户操作的响应最终会出现在正在监听的聊天线程中。

    我如何(理想情况下)解决这个架构问题?我走错方向了吗?

    最佳答案

    如果您不想为聊天打开新连接,则必须处理更复杂的有线协议(protocol):

    您必须以允许服务器找出两者中的哪一个现在正在通过的方式来消息框架数据和聊天消息。根据接收到的数据,需要区别对待。

    使用多个线程从同一个 TCP 连接中读取是没有意义的。 TCP 不是基于消息的。传入的字节可以任意分散在线程中。单个线程需要找出即将到来的数据类型并分派(dispatch)它。

    关于c# - .Net Socket 增强以支持 ACK 和聊天?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26690356/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com