我正在用 C# 编写一个即时消息服务器用于学习目的。
我的问题是我应该使用同步套接字还是异步套接字来处理 IM 客户端。目标是处理尽可能多的客户。
我不太确定,但据我所知,使用异步套接字,数据包不会按顺序到达,这意味着当您发送 2 条聊天消息并且存在延迟/滞后时,第二条消息可能会在第一条消息之前到达。这是正确的,如果是这样,有没有办法解决这个问题?
关于同步套接字:同步套接字对许多客户端来说是一个很好的解决方案吗?如果有新数据包,我是否必须检查循环中的每个套接字/连接?如果是这样,这不是很慢吗?
最后一个问题:假设我想实现一种通过协议(protocol)发送文件(例如图像)的方法(顺便说一句,这是一个非标准的二进制协议(protocol)),我还能在上传时发送消息吗?
最佳答案
那么异步。它的规模要好得多。
TCP 保证一切都按顺序到达。
我建议您使用单独的连接进行文件传输。使用第一个连接进行握手(确定使用哪个端口并指定文件名等)。然后在新套接字上使用 Socket.SendFile
传输文件。