- 博客(99)
- 资源 (4)
- 收藏
- 关注
原创 WebSocket 对于手游的意义
因为WebScoket是HTTP协议的升级,因此,现在不少CDN服务提供商支持WebScoket,那么对于网络上常见的DDOS攻击,CC攻击,不少CDN提供商是带了DDOS,CC攻击保护的,意思就是,如果采用WebScoket+CDN的方案,面对这类网络攻击,你不需要额外花钱去买高防。但好处显而易见,通过CDN做隔离,服务器的真实IP不用暴露,所有的通讯都走CDN,一般的DDOS或则CC攻击在CDN这一层就被拦下,包括一些入侵服务器的行为,在无法得到服务器真实IP的情况下,攻击就无法实施。
2024-04-03 17:45:57 597 1
原创 .net 实现的 Webscoket 对象的一些细节和疑问
这两天服务器和客户端进行了webscoket的联调,在和C#的webscoket实现联调的过程中,发现一些有趣的事情。在我自己C++的实现中,webscoket对上层应用而言是完全透明的,webscoket 只是一个传输协议,用户对此不需要有任何关注,一切都自动进行,包括连接,握手升级,帧切割,帧拼合,控制帧管理,心跳这些,对外完全透明。
2024-04-03 11:19:36 1224
原创 webscoket 中的 mask 细节
我们看到,这个写的很清楚,掩码是给 payload 进行加密用的,这个位置会产生一个误解,就是,如果我没有 payload 的时候,是不是可以不需要掩码?比如一个 ping 帧,不带任何数据是否不需要mask?因此,你可以看到客户端发送到服务器的ping,实际上是带了掩码的,哪怕这个ping没有任何payload 数据。这段明确说了,客户端发送到服务器的所有帧都。有掩码,而服务器发送到客户端的所有帧都。如果违背了这个规则,就。以1002错误关闭连接。
2024-04-02 16:57:35 448
原创 聊聊websocket opcode中的text / binary模式
怎么解读帧都是应用层的事情,用什么格式来理解帧的内容,不就是subprotocol干的事情吗?这儿应该有更方便,或则说更直接的方式来处理,理清楚思路之后,我决定将opcode交给应用层来处理,应用层必须注册 subprotocol,提供具体的帧解析的接口,握手的时候,如果没有指定subprotocol,那就采用一个通用的dummy来处理帧。但这个区分并没有规定文本类型有类似于http协议中空行表示结束的说法,而且长度也是由帧头记录,也就是说,单纯从协议格式上来讲,这个区分,没有任何实际的含义。
2024-03-29 11:41:06 327
原创 websocket 内的操作码fin和opcode
在 webscoket 中,控制帧有一个限定:控制帧不允许分段(5.4. Fragmentation),意思就是,控制帧只允许作为一个完整的帧一次性发送。所以我们在处理webscoket帧的时候,如果Fin位为0,则不处理,将帧放入一个缓存,发现 Fin 位为1 的时候就可以处理帧了,根据帧的opcode来判断,如果是控制帧就直接处理,如果连续帧,就将之前缓存的帧拼接成一个完整的payload即可。其中,0,1,2是正常传输数据用的代码,8,9,A是标准的控制帧。rsv1 - 3 不用考虑,被保留的位。
2024-03-25 18:46:29 889
原创 http 协议的有效字符
qdtext:除了引号 ” 之外的TEXT (即任何 8 位字节,除开控制字符,但包括CR LF HT) quoted-pair:(反斜杠后跟 [0, 127] 范围内的任何值)。但是,实际上,几乎所有的web服务器都不会接受除了CR LF HT之外的控制字符,以及大于等于127的字符(即几乎所有不可读的字符都不在范围之内)。如果研究完协议的描述,可以看到,所有的8字节ASCII码事实上都在标准的允许之内!token:除开控制字符和分隔符的 us字符 [0, 127];
2024-03-20 16:04:43 436
原创 websocket 中 request-line 中的URI编码问题
websocket, nginx,client sent invalid request while reading client request line,
2024-03-20 11:14:09 379
原创 websocket 升级协议时的协议切换点
websocket 的 rfc6455 标准中提到了协议升级,从http协议升级到websocket协议,用的办法是在http的request header中包含Connection: upgrade 和 Upgrade: websocket 以及其他验证相关的头。但这儿有一个小问题,在rfc6455中并没有明确的提到,就是服务器在接收到http请求头之后,如何从文本格式切换到帧格式?而websocket由于是请求/响应协议升级,没有附带的payload,因此,可以确定的是,在收到。
2024-03-19 11:07:25 355
原创 Websocket 中的 sub-protocol 和 extensions 的关系
Websocket 的 Sub-protocol 和 Extensions
2024-03-15 15:13:41 600
原创 XBox One 国行解锁
④:国行Xbox开机进入主界面后插入U盘,重启主机,重启之后,打开设置 ->系统->语言和区域,如果位置改变则解锁成功。去掉文本文档的扩展名.txt,然后文本文档就变成一个空白文件,然后将该空白文件放在U盘的根目录(不要隐藏该文件)。⑤:再次重启主机,并安装字体补丁。(解锁成功后可以取下U盘)①:将主机升级到最新版的操作系统。②:将U盘格式化为NTFS格式。
2024-02-12 14:12:00 291
原创 foobar2000 突然无法正常输出DSD信号
之前一直在用foobar2000加外置dac听音乐,有一天突然发现听dsd的时候,dac面板显示输出的是PCM格式信号,而不是DSD信号,这让我觉得很奇怪,反复折腾了几次,卸载安装驱动什么的,依然如此,百思不得其解。后来无意中发现一个设置,在foobar的设置:tool -> sacd选项中,有一个output mode的选项。这一项被设置成了PCM,改成DSD之后,就解决了这个问题。
2023-11-26 10:37:21 445
原创 离散化,这个概念是谁翻译的?
离散化(discretization discipline),你可能会以为是指把一些东西分散处理,但!实际上,这个词的含义是:是把很多分散的东西,集中起来,使其变得更加容易处理。这个"集中起来,使其更加处理",可以这么理解:找出这些东西的共性,去掉这些东西的异性。或则用更哲学的语言来表示:对对象共性的抽象。离散,中文的含义就是分散,分开,模糊。
2023-04-19 18:32:41 101
原创 支付宝Alipay接入时,报错Error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
用支付宝开放平台开发助手生成的私钥是PKCS8格式的,需要转换成PKCS1格式,否则调用会报这个错。把数据转成这个格式,这个错误就会消失。
2023-02-15 12:27:28 2412
原创 Unity的Socket在iOS下报10045的错。。。
这个错其实很简单,只是。。。前几天客户端的程序员告诉我,Unity在iOS机型上有个问题,Socket在息屏后,如果之前连接了服务器,再次连接就没有问题,但是如果之前没有连接服务器,尝试去连接的话,Socket就会报错10045。我仔细查了一下10045的错误信息,其实就是提示操作不支持。比如在TCP上执行UDP的操作,或则,在IPV4的协议上连接IPV6地址诸如此类的。按道理来讲,应该非常容易解决的,仔细检查一下代码应该就完事儿。我问客户端的程序,这个重新连接前,释放没有?重新初始化没有?
2022-04-28 13:07:49 316
原创 Unity IAP插件的iOS接入,服务器出现21002问题。
之前的老的框架,之前的项目一直都很正常的运行,这次接入iOS支付的时候,服务器出现了21002错误。这个问题让我头疼了1天。原因很简单,正常的iOS内购,苹果给的收据,由客户端进行base64编码之后,直接发送给服务器,然后服务器向苹果的对账服务器请求验证。只需要按苹果要求组装好json字符串即可。而网上关于设置 content_type = "application/json; charset=utf-8",或则将空格换成+号的说法,其实和这个21002半毛钱关系都没有。据我的测试可得知,co
2022-04-24 16:29:57 5328
原创 Think.js 中条件查询同字段如何用OR
在Think.js中,我们一般用_complex和_logic配合来实现一些查询的组合条件,比如 let data = await this.model('charge', 'mysql_nova').where( { _complex: { phone : [ '=', account] account : [ '=', account], _logic : "OR"
2022-04-21 13:57:09 345
原创 MYSQL Error 2013,Blob字段长度,以及max_allowed_packet
昨天服务器丢失与mysql的连接了,半夜的时候,客服给我打电话,我到服务器上看日志,看到日志中显示MySql 2013错误。2022-04-17 13:49:53 [167558.625s][ERROR] Lost connection to MySQL server during query2022-04-17 13:49:53 [167558.625s][ERROR] Failed execute SQL command: call update_ranking(?,?,?,@code), wit
2022-04-18 13:00:46 748
原创 12AU7设计中的一个小技巧
12AU7用的是12V电压,如果想用6V电压,则需要把4,5脚并联,和第9脚一同加载6v电压才能正确的点亮灯丝。事实上,第9脚是4,5脚之间的灯丝的中心抽头,其实就是接地点。如果交流点灯,这个点就非常重要,为什么?因为有些版本的12AU7的设计,就是用这个电位屏蔽两个三极管之间的干扰。因此,如果是接6V,千万别用交流点灯,会带来干扰,直接用直流电灯,而且第9脚接地。这样就可以避免上述问题。...
2022-03-30 12:18:26 1163
原创 一例 mysql error 2036
今天服务器启动的时候初始化失败,并提示mysql 的 2036错误。这个错误的具体描述是:Error: 2036 (CR_UNSUPPORTED_PARAM_TYPE)Message: Using unsupported buffer type: %d (parameter: %d)使用了不支持的缓冲区类型,这个问题来的很突然,之前的服务器一直没有报过这种错,然后我用navcat去访问数据库,执行同样的查询命令返回的是成功,这儿就可以排除数据库本身的故障了。但这个错出的也是很诡异,如果是不支持的缓
2022-02-23 14:16:12 267
原创 C++服务器调用MYSQL存储过程utf8乱码问题
1. 在C++代码创建连接时,指定UTF8的字符集。2. MYSQL数据库的属性中,必须是UTF8字符集。3. MYSQL的表的具体字段,指定UTF8字符集。4. MYSQL的存储过程,在申明字符串参数的时候,在申明后面加上CHARSET 'UTF8'比如 IN param1 varchar(128) CHARSET 'UTF8',必须做到上面的所有条件,否则必定是乱码。...
2022-02-10 18:09:22 1032
Compositor.rar
2020-09-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人