摘要: 优先级队列(PriorityQueue)是个很有用的数据结构,很多编程语言都有实现。NodeJs是一个比较新潮的服务器语言,貌似还没有提供相关类。这些天有用到优先级队列,因为时间很充足,闲来无事,就自己实现了一下。代码如下: 我觉得,相对于其他排序算法而言,用堆实现优先级队列,入队时间波动较小,比较 阅读全文
posted @ 2016-04-20 15:26 草谷子 阅读(3634) 评论(1) 推荐(0) 编辑
摘要: 因为TCP协议是流协议,在收发数据的时候会有粘包的问题。本例使用自定义的SPtcp封包协议对TCP数据再进行一次封装,解决了粘包问题。 注:其性能仍有待优化。优化方向:使用TCP自带的接收窗口缓存。 sptcp.js spsvr.js spcli.js 优化方案1:接收缓存_sp_rcv_buf改为 阅读全文
posted @ 2016-04-15 13:05 草谷子 阅读(4918) 评论(1) 推荐(2) 编辑
摘要: Linux平台:CentOS release 6.5 (Final) Windows平台:Windows 7 旗舰版 服务器端代码如下: 客户端代码如下: 在Linux上运行server.js,然后分别在Linux上和Winows上执行client.js,并在执行过程中按下Ctrl+C终止进程,我发 阅读全文
posted @ 2016-04-13 18:15 草谷子 阅读(1073) 评论(0) 推荐(0) 编辑
摘要: 服务器测试代码如下: 黄色部分为处理粘包的测试用关键代码。经测试,这种方法是错误的。原因是在特定字符编码格式下,1个字符可能占用多个字节,而data是Buffer对象,是以字节为存储基本单元的。在传输的过程中,某一个字符很可能被截断到两次data事件回调中。而arr.join('')在连接各元素之前 阅读全文
posted @ 2016-04-12 20:29 草谷子 阅读(1576) 评论(0) 推荐(0) 编辑
摘要: 今天用NodeJs写了个简单的客户端/服务器程序,并让客户端向服务器发送汉字。当在Windows上执行客户端时,发现服务器端打印的接收到的数据是乱码。后来发现Windows上的客户端文件的储存编码方案是ANSI,于是将其改为UTF-8重新测试,这次服务器端正常显示中文汉字了。我想,NodeJs读取源 阅读全文
posted @ 2016-04-12 18:46 草谷子 阅读(521) 评论(0) 推荐(0) 编辑
摘要: 在JavaScript中,有个有意思的的式子:NaN !== NaN。在Set中的元素的重复检查或者Map键的定位过程中,都是用的类似恒等的检查逻辑。该逻辑和恒等检查的主要区别就是:NaN等于自身。 阅读全文
posted @ 2016-04-08 15:24 草谷子 阅读(499) 评论(0) 推荐(0) 编辑
摘要: 字节序:数据单元的字节顺序,按存储顺序可分为大端序和小端序,按存储介质可分为主机序和网络序。 主机序:数据单元各字节在电脑中的存储顺序,称作主机序。Intel、AMD的CPU都是小端序。 网络序:数据单元各字节在网络传输介质中的存储顺序,称作网络序。可以这样理解传输介质的高低位,靠近发送端的部分为高 阅读全文
posted @ 2016-04-07 19:14 草谷子 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 今天看了看阮一峰的《ECMAScript 6入门》的let和const命令,看完let之后自己测试了一把,仿佛处在云里雾里之中。代码如下: 运行结果如下: 从结果中我总结出如下规律: 1.let变量会隐式传递到下层函数里面; 2.函数接收到上层传递来let变量后,会开辟一块新的内存,用以保存该变量; 阅读全文
posted @ 2016-04-05 18:37 草谷子 阅读(616) 评论(0) 推荐(0) 编辑
摘要: nodejs在创建udp套接字的时候,需要传入一个类型参数。有两种类型参数可供选择:udp4和udp6。udp4对应的就是ipv4,udp6对应的是ipv6。 阅读全文
posted @ 2016-04-02 23:19 草谷子 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 1. 服务器端Socket监听80端口,建立连接传输数据时也是使用的80端口么? 答:对。建立连接时服务器会分配一个新的Socket,但是用的源端口号还是80端口。套接字是由协议类型、源IP、目的IP和源端口、目的端口五部分组成的,理论上讲,不同连接的套接字只要满足这五部分不完全相同即可。只要不完全 阅读全文
posted @ 2016-04-01 13:30 草谷子 阅读(4235) 评论(0) 推荐(0) 编辑