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 (难用)