0

所以我有一个用haskell编写的服务器软件,使用snap作为选择的服务器库。

在 Linux 下,如果我在另一个进程仍在运行时再次启动同一进程,我可以启动该进程并得到正确的错误,因为默认端口已在使用中。

在 Windows 下,我可以启动任意数量的进程,所有进程都在同一个端口上侦听。唯一接受请求的服务器是第一个启动的服务器。如果我终止服务的进程,则请求会按照我启动进程的顺序传递到服务器。(意思是如果我杀死第一台服务器,第二台现在服务请求。如果我杀死那个,第三台开始接收请求,等等)

没有错误。进程只是运行。这与我所见过的任何东西都不一样,与我阅读的任何类型的文档相比,我不知道为什么会发生这种情况。

各种检查开放端口的 javascript 库只需在该端口上启动一个新服务器并监听它。如果它因错误而爆炸,库会告诉您端口已使用,否则它们会退出并告诉您端口已打开。随着这种情况的发生,所有常用的库都告诉我我的服务器正在侦听的端口没有被使用,因为它只是默默地被放入了那个不祥的队列。

编辑:所以我用其他编程语言的默认http服务器实现做了一些基本测试,它们都设法监听并实际占用正在使用的端口(例如,导致其他实例无法启动并退出并出现适当的错误)。

如果另一个进程占用了请求的端口,Snap Server 都不会因错误而退出,它本身不会导致其他系统失败。

到底是怎么回事?

4

0 回答 0