V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  bthulu  ›  全部回复第 1 页 / 共 53 页
回复总数  1048
1  2  3  4  5  6  7  8  9  10 ... 53  
改什么改, 报警啊
10 天前
回复了 peyppicp 创建的主题 NAS 绿联公众号发布致歉信
@revoirzl 那我直接买 dell 服务器搞 ALL IN ONE 会不会比较不容易 BOOM?
不好用, 我用 idea 开发.net, 很明显就不如 rider
只是从 API 网关迁移到云原生网关, 变个法子涨价而已
别用 cron, 不稳定, 不定什么时候就漏执行了
17 天前
回复了 nirayxu 创建的主题 Android 求推荐看 epub 没有乱七八糟广告的 app
neat reader+1
17 天前
回复了 PierreGasly 创建的主题 Android 快要入职了,求推荐工作用国产手机
iqoo11 或 iqoo11s, 闲鱼 2000 左右, 选那种电池健康度 100%的, 基本出厂不到三个月, 跟新的一模一样.
@InkStone
@flyqie
@chenyu0x00
@pengjay
@ccnoobs
刚才实测, 同一个客户端, 先向服务端 1 发送 7 万次请求, 再向服务端 2 发送 7 万次请求.

结果是向服务端 1 发送到 6 万多次时就报 SocketException: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。

再向服务端 2 发请求时, 一次请求都发不出去.

实践证明在 windows 上, 端口是共用的, 若通过端口 9000 请求 dstIp1 并关闭后, 9000 端口进入 time_wait 状态, 此时往其他 dstIp 发送请求时也无法使用这个端口.

服务端代码
```C#
using System.Net;
using System.Net.Sockets;

int port = 9000;
TcpListener server = new TcpListener(IPAddress.Any, port);
server.Start();
Console.WriteLine($"Server listening on :{port}");

try
{
var writer = File.AppendText("c:/temp/a.txt");
List<int> ports = [];
while (true)
{
TcpClient client = server.AcceptTcpClient();
IPEndPoint endPoint = (IPEndPoint)client.Client.RemoteEndPoint!;
ports.Add(endPoint.Port);
if (ports.Count > 10)
{
writer.WriteLine(string.Join("\r\n", ports));
writer.Flush();
ports.Clear();
}
}
}
catch (SocketException e)
{
Console.WriteLine($"SocketException: {e}");
}
finally
{
server.Stop();
}
```

客户端代码
```C#
public class UnitTest1
{
[TestMethod]
public async Task TestMethod1()
{
int k = 0;
for (int j = 0; j < 70; j++)
{
List<Task> list = [];
for (int i = 0; i < 1000; i++)
{
k++;
Task task = OpenAndCloseTcp("10.98.20.129");
list.Add(task);
}

await Task.WhenAll(list);
Console.WriteLine(k);
}
}

[TestMethod]
public async Task TestMethod2()
{
int k = 0;
for (int j = 0; j < 70; j++)
{
List<Task> list = [];
for (int i = 0; i < 1000; i++)
{
k++;
Task task = OpenAndCloseTcp("10.98.20.130");
list.Add(task);
}

await Task.WhenAll(list);
Console.WriteLine(k);
}
}

private async Task OpenAndCloseTcp(string ip)
{
using var client = new TcpClient();
await client.ConnectAsync(ip, 9000);
await using NetworkStream stream = client.GetStream();
byte[] bytes = "\r\n"u8.ToArray();
await stream.WriteAsync(bytes);
}
}
```
@chenyu0x00 我就说为啥我这突破不了 2000 了, 我还以为哪里配置有问题. 我这里是代理了 Modbus 主服务器, 走的是短链接 tcp 协议, 不是 http. Modbus 主服务器是施耐德的 PLC, 限制只能短链接. 这种情况下, 还有什么别的办法突破 2000 这个限制吗?
@chenyu0x00 但是 nginx 反代呢, 他跟后端服务器之间, nginx 的 IP 是固定的, 后端服务器的 IP 和端口也是固定的, 这个时候只有 nginx 的端口是动态的了. 可不可以认为这种情况下, nginx 的 TPC 不可能>2000?
@codehz nginx 不是服务端呀, nginx 是做反向代理, 是客户端. benchmark 程序可以使用端口复用, nginx 应该是不会端口复用的吧?
也就是说, 就是 keep-alive 确保了可以突破 2000?
@InkStone 这跟四元组有什么关系? nginx 压测, 后端起一个服务器, nginx 代理请求到这个服务器, 测试端全部是短链接请求, dstPort,dstIp, srcIp 都是固定的, 只有 srcPort 是变化的.
我司用的国产古方金丝楠木发布
21 天前
回复了 jmychou 创建的主题 程序员 生产环境 SpringBoot Tomcat 线程卡住
看看是不是有人在接口里写了一句 thread.sleep
23 天前
回复了 Tsccai 创建的主题 MySQL MySQL 安装路径不能有中文吗?
@huanxi0701 小皮是什么
为什么你们还在用网关, 网关这种东西, 自 k8s 诞生的那一天起就被淘汰了.
1  2  3  4  5  6  7  8  9  10 ... 53  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2572 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 38ms · UTC 12:24 · PVG 20:24 · LAX 05:24 · JFK 08:24
Developed with CodeLauncher
♥ Do have faith in what you're doing.