Skip to content

Commit 84d242f

Browse files
committed
update to v1.3.6.7
1 parent 3f01857 commit 84d242f

File tree

13 files changed

+266
-60
lines changed

13 files changed

+266
-60
lines changed

Bumblebee/Bumblebee.csproj

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,36 @@
22

33
<PropertyGroup>
44
<TargetFramework>netcoreapp2.1</TargetFramework>
5-
<Version>1.3.5.2</Version>
5+
<Version>1.3.6.7</Version>
66
<Authors>henryfan</Authors>
7-
<Company>ikende.com</Company>
8-
<Copyright>Copyright © beetlex.io 2019-2020 email:henryfan@msn.com</Copyright>
9-
<Description>.net core webapi and websocket gateway service component</Description>
10-
<PackageIconUrl>https://raw.githubusercontent.com/IKende/Bumblebee/master/Bumblebee/Bumblebee.png</PackageIconUrl>
11-
<PackageLicenseUrl>https://github.com/IKende/Bumblebee/blob/master/LICENSE</PackageLicenseUrl>
7+
<Company>beetlex.io</Company>
8+
<Copyright>Copyright © 2019-2020 beetlex.io</Copyright>
9+
<Description>.net core http and websocket gateway service component</Description>
10+
<PackageIconUrl></PackageIconUrl>
11+
<PackageLicenseUrl></PackageLicenseUrl>
1212
<PackageProjectUrl>https://github.com/IKende/Bumblebee</PackageProjectUrl>
1313
<PackageId>BeetleX.Bumblebee</PackageId>
14-
<AssemblyVersion>1.3.5.2</AssemblyVersion>
14+
<AssemblyVersion>1.3.6.7</AssemblyVersion>
1515
<SignAssembly>false</SignAssembly>
1616
<AssemblyOriginatorKeyFile>Bumblebbe.pfx</AssemblyOriginatorKeyFile>
17-
<FileVersion>1.3.5.2</FileVersion>
17+
<FileVersion>1.3.6.7</FileVersion>
18+
<PackageReleaseNotes>.net core http and websocket gateway service component</PackageReleaseNotes>
19+
<PackageIcon>beetlex200.png</PackageIcon>
1820
</PropertyGroup>
1921

2022
<ItemGroup>
2123
<Compile Remove="Controller.cs" />
2224
</ItemGroup>
2325

2426
<ItemGroup>
25-
<PackageReference Include="BeetleX.FastHttpApi" Version="1.7.9.8" />
27+
<None Include="..\..\..\..\beetlex200.png">
28+
<Pack>True</Pack>
29+
<PackagePath></PackagePath>
30+
</None>
31+
</ItemGroup>
32+
33+
<ItemGroup>
34+
<PackageReference Include="BeetleX.FastHttpApi" Version="1.8.2.2" />
2635
</ItemGroup>
2736

2837
</Project>

Bumblebee/Gateway.cs

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class Gateway : IDisposable
3636

3737
public const int URL_FILTER_ERROR = 593;
3838

39-
public const int IP_LIMITS_ERROR = 594;
39+
public const int IP_LIMITS_ERROR = 509;
4040

4141
public const int URL_LIMITS_ERROR = 595;
4242

@@ -58,7 +58,7 @@ public class Gateway : IDisposable
5858

5959
public int BufferSize { get; set; } = 1024 * 4;
6060

61-
public int PoolMaxSize { get; set; } = 1024 * 50;
61+
public int PoolMaxSize { get; set; } = 1024 * 500;
6262

6363
static Gateway()
6464
{
@@ -76,14 +76,15 @@ public Gateway()
7676
Statistics.Server = "Gateway";
7777
AgentMaxSocketError = 3;
7878
MaxStatsUrls = 20000;
79-
AgentMaxConnection = 200;
79+
AgentMaxConnection = 500;
8080
AgentRequestQueueSize = 500;
8181
ThreadQueues = (Environment.ProcessorCount / 2);
8282
if (ThreadQueues == 0)
8383
ThreadQueues = 1;
8484
GatewayQueueSize = Environment.ProcessorCount * 100;
8585
InstanceID = Guid.NewGuid().ToString("N");
86-
GATEWAY_VERSION = $"beetlex.io[{typeof(BeetleX.BXException).Assembly.GetName().Version}/{HttpServer.GetType().Assembly.GetName().Version}/{GetType().Assembly.GetName().Version}]";
86+
GATEWAY_VERSION = $"beetlex.io";
87+
TimeoutFactory = new TimeoutFactory(this);
8788

8889
}
8990

@@ -170,6 +171,8 @@ private void OnVerifyTimer(Object state)
170171

171172
public Servers.ServerCenter Agents { get; private set; }
172173

174+
internal Servers.TimeoutFactory TimeoutFactory { get; private set; }
175+
173176
public Statistics Statistics { get; private set; } = new Statistics();
174177

175178
public Servers.ServerAgent SetServer(string host, string category, string remark, int maxConnections = 200)
@@ -359,19 +362,19 @@ internal void OnResponseError(EventResponseErrorArgs e)
359362
);
360363
Pluginer.Requested(se);
361364
}
362-
RequestIncrementCompleted(e.Request, e.ErrorCode, 1, null);
363365
this.Pluginer.ResponseError(e);
364366
if (e.Result != null)
365367
{
366368
e.Response.Result(e.Result);
367369
}
370+
RequestIncrementCompleted(e.Request, e.ErrorCode, 1, null);
368371
}
369372

370373
internal void OnRequestCompleted(Servers.RequestAgent success)
371374
{
372375
try
373376
{
374-
ServerHttpRequested.Invoke(this, success);
377+
ServerHttpRequested?.Invoke(this, success);
375378
}
376379
catch (Exception e_)
377380
{
@@ -381,6 +384,7 @@ internal void OnRequestCompleted(Servers.RequestAgent success)
381384
$"Gateway {success.Request.ID} {success.Request.RemoteIPAddress} {success.Request.Method} {success.Request.Url} error {e_.Message}@{e_.StackTrace}");
382385
}
383386
}
387+
HttpServer.IncrementResponsed(success.Request, null, success.Time, success.Code, success.Message);
384388
RequestIncrementCompleted(success.Request, success.Code, success.Time, success.Server);
385389
if (Pluginer.RequestedEnabled)
386390
Pluginer.Requested(success.GetEventRequestCompletedArgs());
@@ -405,7 +409,6 @@ internal void OnResponding(RequestAgent request, ArraySegment<byte> data, bool c
405409

406410
public void RequestIncrementCompleted(HttpRequest request, int code, long time, Servers.ServerAgent server = null)
407411
{
408-
HttpServer.IncrementResponsed(request, null, time, code, null);
409412
if (StatisticsEnabled)
410413
{
411414
Statistics.Add(code, time);
@@ -487,11 +490,21 @@ public void Open()
487490

488491
private void OutputLogo()
489492
{
490-
AssemblyCopyrightAttribute productAttr = typeof(BeetleX.BXException).Assembly.GetCustomAttribute<AssemblyCopyrightAttribute>();
493+
AssemblyCopyrightAttribute productAttr = typeof(Gateway).Assembly.GetCustomAttribute<AssemblyCopyrightAttribute>();
491494
var logo = "\r\n";
492-
logo += "*******************************************************************************\r\n";
493-
logo += " BeetleX http and websocket gateway framework \r\n";
495+
logo += " -----------------------------------------------------------------------------\r\n";
496+
logo +=
497+
@" ____ _ _ __ __
498+
| _ \ | | | | \ \ / /
499+
| |_) | ___ ___ | |_ | | ___ \ V /
500+
| _ < / _ \ / _ \ | __| | | / _ \ > <
501+
| |_) | | __/ | __/ | |_ | | | __/ / . \
502+
|____/ \___| \___| \__| |_| \___| /_/ \_\
494503
504+
http and websocket gateway framework
505+
506+
";
507+
logo += " -----------------------------------------------------------------------------\r\n";
495508
logo += $" {productAttr.Copyright}\r\n";
496509
logo += $" ServerGC [{GCSettings.IsServerGC}]\r\n";
497510
logo += $" BeetleX Version [{typeof(BeetleX.BXException).Assembly.GetName().Version}]\r\n";
@@ -502,7 +515,7 @@ private void OutputLogo()
502515
{
503516
logo += $" {item}\r\n";
504517
}
505-
logo += "*******************************************************************************\r\n";
518+
logo += " -----------------------------------------------------------------------------\r\n";
506519

507520
HttpServer.Log(LogType.Info, logo);
508521

Bumblebee/GatewayConfig.cs

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ public class GatewayConfig
1111

1212
public GatewayConfig()
1313
{
14-
GatewayQueueSize = Environment.ProcessorCount * 500;
14+
GatewayQueueSize = Environment.ProcessorCount * 100;
1515
InstanceID = Guid.NewGuid().ToString("N");
1616
}
1717

1818
public int AgentMaxConnection { get; set; } = 300;
1919

20-
public int AgentRequestQueueSize { get; set; } = 2000;
20+
public int AgentRequestQueueSize { get; set; } = 500;
2121

2222
public int GatewayQueueSize { get; set; }
2323

@@ -57,8 +57,9 @@ public void From(Gateway gateway)
5757
Uri = server.Uri.ToString(),
5858
Remark = server.Remark,
5959
Category = server.Category,
60+
Command = server.Command,
6061
Properties = server.GetProperties()
61-
});
62+
}); ;
6263
}
6364
this.OutputServerAddress = gateway.OutputServerAddress;
6465
this.AgentMaxConnection = gateway.AgentMaxConnection;
@@ -107,6 +108,7 @@ public void To(Gateway gateway)
107108
foreach (var server in Servers)
108109
{
109110
var agent = gateway.SetServer(server.Uri, server.Category, server.Remark, server.MaxConnections);
111+
agent.Command = server.Command;
110112
agent.SetProperties(server.Properties);
111113
}
112114
foreach (var s in gateway.Agents.Servers)
@@ -140,6 +142,8 @@ public class ServerInfo
140142

141143
public string Remark { get; set; }
142144

145+
public string Command { get; set; }
146+
143147
public Tuple<string, string>[] Properties { get; set; }
144148
}
145149

@@ -158,6 +162,20 @@ public class UrlConfig
158162

159163
public int MaxRps { get; set; }
160164

165+
public long TimeOut { get; set; }
166+
167+
public string AccessControlAllowOrigin { get; set; }
168+
169+
public string AccessControlAllowMethods { get; set; } = "*";
170+
171+
public string AccessControlAllowHeaders { get; set; }
172+
173+
public int AccessControlMaxAge { get; set; }
174+
175+
public bool AccessControlAllowCredentials { get; set; }
176+
177+
public string Vary { get; set; } = "Origin";
178+
161179
public class RouteServer
162180
{
163181
public string Url { get; set; }
@@ -175,6 +193,13 @@ public void From(Routes.UrlRoute urlRoute)
175193
Remark = urlRoute.Remark;
176194
HashPattern = urlRoute.HashPattern;
177195
MaxRps = urlRoute.MaxRps;
196+
TimeOut = urlRoute.TimeOut;
197+
AccessControlAllowHeaders = urlRoute.AccessControlAllowHeaders;
198+
AccessControlAllowMethods = urlRoute.AccessControlAllowMethods;
199+
AccessControlAllowOrigin = urlRoute.AccessControlAllowOrigin;
200+
AccessControlMaxAge = urlRoute.AccessControlMaxAge;
201+
Vary = urlRoute.Vary;
202+
AccessControlAllowCredentials = urlRoute.AccessControlAllowCredentials;
178203
this.PluginConfig = new PluginConfig(urlRoute.Pluginer);
179204
foreach (var server in urlRoute.Servers)
180205
{
@@ -185,13 +210,28 @@ public void From(Routes.UrlRoute urlRoute)
185210
public void To(Gateway gateway)
186211
{
187212
gateway.RemoveRoute(Url);
188-
189-
var result = gateway.SetRoute(Url, Remark, HashPattern);
213+
Routes.UrlRoute result;
214+
if (Url == "*")
215+
{
216+
result = gateway.Routes.Default;
217+
}
218+
else
219+
{
220+
result = gateway.SetRoute(Url, Remark, HashPattern);
221+
}
222+
result.MaxRps = MaxRps;
223+
result.TimeOut = TimeOut;
224+
result.Vary = Vary;
225+
result.AccessControlMaxAge = AccessControlMaxAge;
226+
result.AccessControlAllowOrigin = AccessControlAllowOrigin;
227+
result.AccessControlAllowMethods = AccessControlAllowMethods;
228+
result.AccessControlAllowHeaders = AccessControlAllowHeaders;
229+
result.AccessControlAllowCredentials = this.AccessControlAllowCredentials;
190230
this.PluginConfig.To(result.Pluginer);
191231
foreach (var server in Servers)
192232
{
193233
var r = result.AddServer(server.Url, server.Weight, server.MaxRps, server.Standby);
194-
234+
r.TimeOut = TimeOut;
195235
r.MaxRps = this.MaxRps;
196236
}
197237
}

Bumblebee/Plugins/IRespondingHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ namespace Bumblebee.Plugins
77
{
88
public interface IRespondingHandler:IPlugin
99
{
10-
void Exeucte(EventRespondingArgs e);
10+
void Execute(EventRespondingArgs e);
1111
}
1212
}

Bumblebee/Plugins/Pluginer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ public void Responding(EventRespondingArgs e)
451451
for (int i = 0; i < items.Length; i++)
452452
{
453453
if (Gateway.PluginCenter.PluginIsEnabled(items[i]))
454-
items[i].Exeucte(e);
454+
items[i].Execute(e);
455455
}
456456
}
457457
}

Bumblebee/Routes/UrlRoute.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,26 @@ public void BuildHashPattern(string hashPattern = null)
7171

7272
public string UrlPattern { get; set; }
7373

74+
public long TimeOut { get; set; }
75+
76+
#region access-control
77+
78+
public string AccessControlAllowOrigin { get; set; }
79+
80+
public string AccessControlAllowMethods { get; set; }
81+
82+
public string AccessControlAllowHeaders { get; set; }
83+
84+
public int AccessControlMaxAge { get; set; }
85+
86+
public string Vary { get; set; } = "Origin";
87+
88+
public bool AccessControlAllowCredentials { get; set; }
89+
90+
#endregion
91+
92+
93+
7494
#region rps limit
7595

7696
public int MaxRps { get; set; } = 0;

Bumblebee/Routes/UrlRouteAgent.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public void ExecuteWS(HttpRequest request, BeetleX.FastHttpApi.WebSockets.DataFr
3131
request.Server.Log(LogType.Info, $"Gateway websocket {request.RemoteIPAddress} {request.Method} {request.Url} request {UrlRoute.Url}'s route server unavailable");
3232
}
3333

34-
UrlRoute.Gateway.RequestIncrementCompleted(request, Gateway.URL_NODE_SERVER_UNAVAILABLE, 1,null);
34+
UrlRoute.Gateway.RequestIncrementCompleted(request, Gateway.URL_NODE_SERVER_UNAVAILABLE, 1, null);
3535
var frame = request.Server.CreateDataFrame(new { Code = Gateway.WEBSOCKET_INNER_ERROR, Error = $"Gateway websocket {UrlRoute.Url}'s route server unavailable" });
3636
frame.Send(request.Session);
3737
}
@@ -74,7 +74,21 @@ public void Execute(HttpRequest request, HttpResponse response)
7474
{
7575
request.Server.Log(LogType.Debug, $"Gateway {request.RemoteIPAddress} {request.Method} {request.Url} request {UrlRoute.Url}'s get urlroute agent!");
7676
}
77-
77+
if (string.Compare(request.Method, "OPTIONS", true) == 0)
78+
{
79+
if (!string.IsNullOrEmpty(UrlRoute.AccessControlAllowOrigin))
80+
{
81+
OptionsAttribute oa = new OptionsAttribute();
82+
oa.AllowCredentials = UrlRoute.AccessControlAllowCredentials;
83+
oa.AllowHeaders = UrlRoute.AccessControlAllowHeaders;
84+
oa.AllowMaxAge = UrlRoute.AccessControlMaxAge > 0 ? UrlRoute.AccessControlMaxAge.ToString() : null;
85+
oa.AllowMethods = UrlRoute.AccessControlAllowMethods;
86+
oa.AllowOrigin = UrlRoute.AccessControlAllowOrigin;
87+
oa.Vary = UrlRoute.Vary;
88+
response.Result(oa);
89+
return;
90+
}
91+
}
7892
if (!UrlRoute.ValidateRPS())
7993
{
8094
string error = $"Unable to reach [{UrlRoute.Url} route {request.Url}] in HTTP request, exceeding maximum number of rps limit";

0 commit comments

Comments
 (0)