基于.NET Web表单的应用程序在c#中。我需要在应用程序中添加一个模块,允许在登录用户之间聊天,用户可以在聊天期间共享文件,如Skype。同时,我必须在会话期间,在我的服务器上保留每个会话和会话文件的永久记录。我对模块的实现有一些了解,以达到预期的效果,但我确信这不是一个好的做法。这是我的想法:
聊天: 当用户聊天时,创建一个包含发件人ID,接收者ID和消息内容的数据表。当用户按下发送按钮或按Enter键时,将在数据表中插入一个新行,同时包含ID和消息内容,然后数据表将绑定到div等,以向两个用户显示更新的消息。最后,在一个事件(如窗口关闭等)上,数据表将被转换为XML,XML文件将永久存储在硬盘或数据库中。
文件转移: 在用户按下输入/发送按钮的过程中聊天时,我们将检查消息内容,如果发送的消息是文件(带有一些扩展名),则将文件上传到服务器并提供下载链接到接收者。
我希望你明白我的观点。
问题:
1)我想异步共享文件,即传输到接收器并同时保存在服务器上。有可能吗?
2)如何告诉一个用户另一个用户正在输入?
有没有更好的方法来实现这个模块?我应该有什么样的知识来正确理解和实施模块?
感谢任何指导。
答案 0 :(得分:3)
对于基于网络的实时聊天,当前的开源标准承载似乎是SignalR。
关于该产品,这里有很多关于SO的讨论,这些讨论应该有助于您朝着正确的方向前进。
就存储而言,这取决于您可用的基础设施以及您愿意为构建系统而产生的成本。
您可能会考虑使用RabbitMQ进行邮件传递,如果您正确设置,则可以附加队列侦听器,这些侦听器也会根据需要执行聊天记录。 (有很好的文档.NET / C#客户端已经可用于RabbitMQ。)您可能还想查看Wikipedia page for RabbitMQ。
文件传输可能最好通过将文件上传到Web服务器并在那里临时存储,并通过其他聊天客户端下载的文件链接来完成。这导致服务器增加其带宽要求。
您可能还会考虑运行自己的XMPP server并通过SignalR使用Web界面连接到XMPP server。它可以利用最多的功能来缩短产品上市时间。
答案 1 :(得分:0)
你有没有看过SignalR?