TCPListener客户端的谷歌云运行



我目前有一个C#应用程序作为windows服务运行。该应用程序启动一个TCPListener,然后在一段时间内循环获取客户端,并立即将它们扔到ThreadPool.UnsafeQueueUserWorkItem中,以完成所有实际工作。客户端在UnstageQueueUserWorkItem调用结束时关闭。基本代码如下:

var server = new TcpListener(ip, port);
server.Start();
while (true)
{
try
{
TcpClient client = await server.AcceptTcpClientAsync();
var cw = new TcpClientService(logger, client, parser, dataRepo, propertyRecordDefinitions, 
vimAlertsSent, reservations, emailClient);
ThreadPool.UnsafeQueueUserWorkItem(x => ((TcpClientService)x).Run(), cw);
}
catch(Exception iex)
{     
//DO SOME LOGGING    
}
finally
{               
}
}

这一切都作为一个windows服务在AWS的虚拟机上运行。我想知道这是否是Google Cloud Run(或任何其他无服务器/无状态功能(的好候选者。我每分钟收到数百个请求(客户(,希望能扩大到数千个。据我所知,云运行可能会被传入的请求触发,然后我可以运行我的TcpClientService代码,该代码目前正由Threadpool.UnsafeQueueUserWorkItem调用。这是一个好的实现吗?这就是Google Cloud Run优化的目的吗?我想知道我是否会看到一些降级,因为DB连接可能不会被池化,并且我在线程中共享的一些其他结构(我对TcpClientService调用的所有输入(将不得不在每次函数调用中更新。想法?

Cloud Run仅支持TLS上的HTTP/1或HTTP/2(包括gRPC((尽管您的应用程序不需要担心终止TLS(。因此,不支持不属于这些协议的任意TCP协议。请参阅:我的应用程序可以在哪些协议上提供流量服务?

Cloud Run容器实例不接收来自客户端的单个TCP连接。相反,它从负载均衡器接收纯未加密的"HTTP请求",负载均衡器终止HTTPS请求。因此,Cloud Run容器实例不会从客户端获得直接的TCP连接。

除此之外,您在下面描述的用途肯定是Cloud Run的目的:

我每分钟收到数百个请求(客户端(,希望能扩展到数千个。

最新更新