通过在 2 台服务器之间相互发送套接字来共享套接字 (WINSOCK)
Sharing sockets (WINSOCK) by sending them to each other between 2 servers
我正在尝试编写一个分布式服务器系统(现在由服务器 1="main"和服务器 2="替换"组成)。不要介意一些肮脏的方法,它只是为了实现分布式服务器可以实现的基本功能。
目前,我在同一台机器上通过SO_REUSEADDR
和TCP套接字运行两个服务器(也许UDP可以解决我的问题,但我想先用TCP尝试任何一种方式)。
主服务器发送与替换服务器和连接到它的客户端建立连接。现在我想要实现的是:主服务器应该将连接客户端的套接字发送到替换服务器,因此如果主服务器无法再工作(超时或其他什么),替换服务器可以与客户端一起工作并发送/接收它们。我从主服务器发送到替换服务器的套接字是我ClientSocket = ::accept(ListenSocket, NULL, NULL);
得到的套接字,其中 ClientSocket 是SOCKET
(UINT_PTR)。
替换服务器无法向客户端发送/接收,即使主服务器中途终止也是如此。这是因为每个服务器,即使它们在同一端口上运行,也需要通过客户端的::connect
连接?
编辑:如果我的理论是正确的,这也应该通过使用UDP而不是TCP来解决,不是吗?
EDIT2:对于分布式服务器,我的意思是服务器,如果发生故障,它将被另一台服务器替换,而不会中断客户端任务。
编辑3:如果有更好,更简单的方法可以做到这一点,我也想知道。到目前为止,我不太喜欢套接字和服务器通信,这就是我想出解决它的想法的方式。
不能在计算机之间发送套接字。套接字是一个操作系统概念。它表示(在本例中)服务器和客户端之间的连接。无法在具有不同 IP 地址的其他计算机上恢复此连接,因为 TCP 连接定义为在一对地址和一对端口之间建立。
一台机器上的UINT_PTR
对另一台机器没有任何意义。这是一个不透明的值。它是一个操作系统句柄。
UDP 不能解决问题,因为客户端需要注意到正在与之通信的 IP 地址已更改。
即使您管理它,您也会遇到服务器故障会杀死该服务器上所有数据的问题。另一台服务器无法使用完全相同的数据恢复。这是分布式计算的一个基本问题。您无法使所有三台计算机的状态完全同步。
通过重试使客户端容忍中断。使服务器无状态,并将所有数据放入数据库中。
这是一个很难解决的问题。寻求现成的解决方案。
- 当套接字连接断开时检测C/C++Unix
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 套接字读取后,我在缓冲区中看到意外输入
- 如何在CPP中创建应该在Windows和Linux上运行的套接字?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- (Winsock) UDP 接收工作正常,但同一套接字的发送失败
- MSG_WAITALL的套接字发送得到了 22 EINVAL
- C++套接字客户端到 Python 服务器未创建连接
- 在不知道套接字的情况下关闭网络连接
- C++套接字对不读/写父/子
- 非更新套接字消息
- SIGSEGV on Boost UDP 套接字关闭 - tcache_get at malloc.c.
- 将"uint8_t"(从套接字读取)隐式转换为"char"安全吗
- 当对套接字 send() 的同步调用由于连接另一端丢失而被阻止时,如何恢复?
- 当客户端在 write() 期间终止连接时,由对等套接字错误重置连接
- 通过在 2 台服务器之间相互发送套接字来共享套接字 (WINSOCK)