nsmarttcp临时笔记
半连接问题 客户端或者服务端任意一端出现连接断开,就会出现半连接。
服务端断,客户端会收到一个reset信号
客户端断,服务端需要建立心跳机制或者keepalive机制(已解决)
Akka.net尝试
Pipeline机制尝试
===========================
listenerConfigService.Start(100);
while (true)
{
var client = await listenerConfigService.AcceptTcpClientAsync();
ProcessConfigRequestAsync(client);
}
}这种写法是不是有问题 stackoverflow上有类似写法
测试三层回调
================================
webassembly研究 运行老游戏并且联网
====================
httpService.Start();
while (true)
{
var client = await httpService.GetContextAsync();
ProcessHttpRequestAsync(client);
}processhttprequestasync方法體裏面出錯,導致整個端口都無法進入
[ { “port”:”20000”,”clientId”:”56605”,”appId”:”1”,”revconns”:[],”tunnels”:[]},{ “port”:”20001”,”clientId”:”56605”,”appId”:”2”,”revconns”:[],”tunnels”:[]},{ “port”:”20002”,”clientId”:”56605”,”appId”:”3”,”revconns”:[ { },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ }],”tunnels”:[ {},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]},{ “port”:”20003”,”clientId”:”56605”,”appId”:”4”,”revconns”:[],”tunnels”:[]}]
如何處理以上問題:連接端口,但客戶服務無響應,服务端{}代表曾经传输过但已关闭的连接
方法1: 设置响应超时时间 超时则关闭连接。
$”http://*:{WebManagementPort}/“ 無法訪問http服務誰因爲權限不夠
树莓派无故禁止9974,82等端口
————
安全登录问题
———————-
1客户端定时发送心跳,遍历所有客户端连接
2转发需要设置超时 :具体体现在:服务端write客户端时,客户端write服务端时
拿客户端连接时亦可判断客户端是否在线 write是否会阻塞?(想法有问题)
3重新连接问题,若重新连接 如何使用之前的状态?(重新拿已有的clientid连接)
4任何时候接收到异常数据,关闭连接
大量驻留反向链接, 是否滞留?isconnected已经关闭
1,处理客户端主动关闭反向连接的情况
2.处理长时间不用的tcp反向连接 (服务端,客户端都要处理)
异常网络模拟clumsy(神器)
1. 延迟(Lag),把数据包缓存一段时间后再发出,这样能够模拟网络延迟的状况。
2. 掉包(Drop),随机丢弃一些数据。
3. 节流(Throttle),把一小段时间内的数据拦截下来后再在之后的同一时间一同发出去。
4. 重发(Duplicate),随机复制一些数据并与其本身一同发送。
5. 乱序(Out of order),打乱数据包发送的顺序。
6. 篡改(Tamper),随机修改小部分的包裹内容。
已解决:服务启动时,自动收到诡异的数据包,这是 由于上次客户端tcp发送的请求没有成功导致的重发(RST)
kestrel服务可否在dotnet中启动,暂时不考虑(已解决 用httpserver)
客户端存放唯一ID,id长度需增加,方便接下来重新连接,客户端存放密钥+用户名和密码+token三联数组
登陆时增加一个版本标识,方便版本统一,扩展config接口
文件分页
需要学习的
1.tcp编程解耦的方法。
2.系统学习错误处理的方法。
1.重复加载js的问题(已解决时间问题)
2.缓存问题,-同时关联context到server和httpserver上(加入nspservercontext,已完成)
3.关键功能:匿名功能(随机生成用户名密码,返回token),用户IP绑定(bindlist文件),用户切断(bandlist文件),连接管理列表(已完成)
4.额外功能:简单配置功能(已完成),流量图表(已完成),连接图表,用户图表,应用图表,token时间校验,dashborad部分日志,主机名识别,一键部署,dockerhub自动发布,树莓派自动部署功能,客户端登陆功能,约定优于配置,sh部署脚本,文档,插件机制(承载远程开机)
5.已知bug:1.12309登陆的问题。
2。未重现:服务端分配ip出错后,客户端不断重试导致生成多个用户的问
3.删除用户时seq数据库错位(考虑集成事务?)使用litedb解决
服务端出现toomany files,(心跳连接服务端没有关闭)
客户端不在服务端断开时重试(正常无法重现)似乎是心跳时服务端没有close导致(已解决,因为心跳出错的提示顺序不正确导致心跳无限等待)
SSL+http(必要性?)
多语言优化
新问题(功能),
1.winform+客户端+windows服务注册的问题 -〉思路 采用windows服务+udp发送到客户端(暂不考虑)(有bug-缓存文件路径不正确)。客户端重构,服务化,加入-servicemode参数
2.http优化(pipeline.io),开发中使用增加https证书功能,p2p传输优化?
衍生问题:不同用户,多域名绑定问题。http默认host问题,端口冲突解决
3.用户编辑功能
用户绑定列表垃圾数据的问题
host:port存放哈希,会导致找IP冲突麻烦
postmap->子列表哈希存放nspapp,会导致额外的遍历性能开销
考虑使用hash套hash包装对象appmap
疑问 如果tcp客户端服务端互相readwrite 某一次write出现问提 可不可能出现双方都进行read从而都阻塞的情况
压缩打包
dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true (难用)