gpt4 book ai didi

c# - Thrift 非阻塞服务器 c#

转载 作者:可可西里 更新时间:2023-11-01 02:43:36 29 4
gpt4 key购买 nike

最近我们用 Apache Thrift 替换了我们的内部消息传递库。在我们的设置中,我们有几个 c# 服务和几个连接到它们的 c++“客户端”。一开始我们使用 TThreadPoolServer 作为服务器实现。

_server = new TThreadPoolServer(processor, serverTransport);

因为它运行良好,我们还更换了最后一台服务器。此服务器需要与 400 多个客户端通信。我们看到的问题是,一旦客户端编号 100 连接,我们的服务器就停止接受新连接,甚至不调用 c# 计时器。在第一批客户断开连接之前,它似乎有点窒息。

通过阅读此 SO Large number of simulteneous connections in thrift我们决定更改为 TThreadedServer 并将最大线程数增加到 500,我们有了一个可行的解决方案。

_server = new TThreadedServer(processor
, serverTransport
, new TTransportFactory()
, new TTransportFactory()
, new TBinaryProtocol.Factory()
, new TBinaryProtocol.Factory()
, 500
, DebugLogThriftServer);

我仍然希望拥有在 Thrift c++ 库中实现的 TNonblockingServer。我想知道是否有人已经为 C# 编写了一个。

最佳答案

这是一个使用标准的thrift Protocol的RPC框架,和使用thrift IDL定义服务是一样的效果,即thrify可以兼容使用thrift IDL的代码,这对跨界很有帮助-平台。

[ThriftStruct]
public class LogEntry
{

[ThriftConstructor]
public LogEntry([ThriftField(1)]String category, [ThriftField(2)]String message)
{
this.Category = category;
this.Message = message;
}

[ThriftField(1)]
public String Category { get; }

[ThriftField(2)]
public String Message { get; }
}

[ThriftService("scribe")]
public interface IScribe
{
[ThriftMethod("getMessages")]
List<LogEntry> GetMessages();

[ThriftMethod]
ResultCode Log(List<LogEntry> messages);
}

public class Scribe : IScribe
{
public List<LogEntry> GetMessages()
{
return new List<LogEntry>
{
new LogEntry { Category = "c1", Message = Guid.NewGuid().ToString() },
new LogEntry { Category = "c2", Message = Guid.NewGuid().ToString() },
new LogEntry { Category = "c3", Message = Guid.NewGuid().ToString() }
};
}

public ResultCode Log(List<LogEntry> messages)
{
return ResultCode.TRY_LATER;
}
}

你可以试试:https://github.com/endink/Thrifty

关于c# - Thrift 非阻塞服务器 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28684156/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com