复杂的套接字应用程序与多个客户端和web界面
本文关键字:客户端 web 界面 套接字 应用程序 复杂 | 更新日期: 2023-09-27 18:03:20
我创建了一个asp.net网站。在这个网站上,用户可以创建网页和放置按钮。这些按钮通过web套接字向我实现的托盘应用程序发送命令。然后,托盘应用程序接受这些命令,并使用TCP连接将它们传递给各种第三方应用程序。然后第三方应用程序执行命令并将其状态发送回托盘应用程序。托盘应用程序将状态写入sql数据库。网站从数据库中读取状态并处理状态(例如,它突出显示发送原始命令的按钮)
现在真是一团糟。例如,第三方应用程序都以不同的方式处理通信。我该如何组织这样一个申请呢?
我使用ab sql数据库之间,因为我不能确定用户不会重新加载网站。然后web套接字会发生什么?此外,它还可以按照自己的节奏更新按钮。这是一个好的解决方案吗?
而且,我对TCP和套接字编程的知识非常缺乏。大多数资源、教程和指南只是给出非常简单的例子。难道就没有更好的吗?(书籍、文章)
我正在使用一个tcpllistener,它在无限循环中接受网站请求:
static void TcpListenerWorker_DoWork(object sender, DoWorkEventArgs e)
{
server = new TcpListener(IPAddress.Parse(Properties.Settings.Default.TrayAppServer), Properties.Settings.Default.TrayAppPort);
// Start listening for client requests.
server.Start();
// Buffer for reading data
Byte[] bytes = new Byte[256];
String data = null;
// Enter the listening loop.
while (true)
{
if (TcpListenerWorker.CancellationPending)
break;
// Perform a blocking call to accept requests.
// You could also user server.AcceptSocket() here.
TcpClient client = server.AcceptTcpClient();
...
是否有更好的方法将托盘应用程序链接到网站?
托盘应用程序还必须检查第三方应用程序是否正在运行。只有当它正在运行时,才应该创建套接字。如果第三方应用程序崩溃,连接将消失。如何正确地重新建立连接?
用户现在应该知道他是否可以发送命令。检查应用程序是否像这样运行
Process.GetProcessesByName("exApp1");
是否有更好的方法来检查应用程序?也许通过尝试建立一个tcp连接,如果它失败,应用程序没有运行。但是依赖于失败的连接尝试可能不是一个好决定。
出现了很多错误。连接消失,命令无法到达。我是否可以使用api来更好地处理这些事情(更好的错误和异常处理)?
抱歉,如果这一切听起来令人困惑。整个项目一团糟。
我要做的一件事就是坐下来,先解开你脑子里的意大利面。如果你对它们进行了适当的抽象,它们使用不同的通信方式这一事实应该无关紧要。
第一个问题是"你需要TCP套接字级通信吗?"我看不出有什么"是"的。假设您这样做了,那么您的第一个问题是获取套接字通信。先把它启动并运行起来。如果这是多个客户机,那么您可以从开源项目开始处理通信位。举个例子,CodePlex上有一个叫做Socket Server的项目,它可以管理Socket。就我个人而言,我并不喜欢项目的设置方式,但请遵循文档并设置服务器。或者搜索另一篇可以为你做这些的文章。
你的下一个问题是"我应该设置一个套接字吗?"如果我是对的,这听起来像是客户方面的问题;如果是这样,请将其与套接字连接分开解决并完成它。我没有足够的带宽来确定你的方法是否是最好的,但是封装代码,你可以替换出确定应用程序是否在运行的方法。现在让我们跳到多个应用程序以不同的方式通信。如果您有一个输入到多个输出,请考虑简化的服务总线,然后为需要侦听的应用程序编写适配器。如果是多进一出,那么无论如何都需要为应用程序编写适配器。也许有些应用确实需要套接字级通信,你需要一个套接字到web API适配器(只是一个例子,因为我没有足够的细节)。
建议的核心是把问题分解,看看你能把什么分离出来,把重点放在什么地方。许多简单的问题通常比一个复杂的大问题更容易解决。