Skip to content

多服务器实例问题 #818

@trackycn

Description

@trackycn
  1. 使用 AddServer 方法添加多个服务器时, 如果使用 AddServer<TReceivePackage, TPipelineFilter> 这样的重载, 将只有第一个服务可以监听, 之后的服务都未监听; 如果改为 AddServer<TSuperSocketService, TReceivePackage, TPipelineFilter>, 则一切正常;
  2. 在 AddServer 里为每个服务都调用了 UseInProcSessionContainer(), 但是获取 ISessionContainer 仍然为空;

示例代码:

var hostBuilder = MultipleServerHostBuilder.Create()
    .ConfigureAppConfiguration((hostCtx, configApp) =>
    {
        configApp.AddJsonFile("appsettings.json", true);
    })
    .AddServer<TextPackageInfo, LinePipelineFilter>(builder =>
    {
        builder
            .ConfigureServerOptions((ctx, config) => config.GetSection("TestServer1"))
            .UsePackageHandler(async (s, p) =>
            {
                Console.WriteLine($"TestServer1: {p.Text}");
            })
            .UseInProcSessionContainer();
    })
    .AddServer<TextPackageInfo, LinePipelineFilter>(builder =>
    {
        builder
            .ConfigureServerOptions((ctx, config) => config.GetSection("TestServer2"))
            .UsePackageHandler(async (s, p) =>
            {
                Console.WriteLine($"TestServer2: {p.Text}");
            })
            .UseInProcSessionContainer();
    })
    .ConfigureLogging((hostCtx, loggingBuilder) =>
    {
        loggingBuilder.AddConsole();
        loggingBuilder.AddDebug();
    });



var host = hostBuilder.Build();
await host.StartAsync();

var session = host.Services.GetService<ISessionContainer>();

Console.ReadLine();

appsettings.json 配置:

{
  "serverOptions": {
    "TestServer1": {
      "name": "TestServer1",
      "listeners": [
        {
          "ip": "Any",
          "port": 4040
        }
      ]
    },
    "TestServer2": {
      "name": "TestServer2",
      "listeners": [
        {
          "ip": "Any",
          "port": 4041
        }
      ]
    }
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions