零:前言:
已有:
js服务端脚本,
redis本地服务
小程序开发者身份
目的是:本地启动WebSocket服务,用小程序开发工具,调用本地IM服务,实现聊天。
一:nodejs本地环境配置(略)
安装Redis-x64-3.2.100.msi,配置文件C:\Program Files\Redis\redis.windows.conf
运行 node .\server-test.js 或 node .\server.js 根据报错一步步配置好缺少的包,其实看代码就知道缺啥:
var socketio = require('socket.io'),
http = require('http'),
domain = require('domain'),
Redis = require('ioredis'),
redisAdapter = require('socket.io-redis'),
request = require('request'),
socket.io 、 require 、ioredis、socket.io-redis
npm install --save socket.io-redis
npm install --save request
二:运行后,报错
问题:redis密码配置未生效
但是,终端可以用密码登录。代码不能连接。
ps:
1. 若 npm install 不好用,试试npm cache clean 后
2.【--save】 https://www.w3h5.com/post/425.html
npm install moduleName # 安装模块到项目目录下
npm install -g moduleName # -g 的意思是将模块安装到全局,具体安装到磁盘哪个位置,要看 npm config prefix 的位置,具体查看方法是在终端输入npm config edit,在弹出的文档中找到; prefix=C:\node,就是了。
npm install --save moduleName # --save 的意思是将模块安装到项目目录下,并在package文件的dependencies节点写入依赖。
npm install --save-dev moduleName # --save-dev 的意思是将模块安装到项目目录下,并在package文件的devDependencies节点写入依赖。
客户端与服务端之间的通信协议是在 TCP 协议之上构建的。
客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 。
客户端和服务器发送的命令或数据一律以 \r\n (CRLF)结尾。
Redis制定了 RESP(REdis Serialization Protocol,Redis序列化协议)实现客户端与服务端的正常交互,这种协议简单高效,既能够被机器解析,又容易被人类识别。
发送命令
RESP 在 Redis 1.2 版本中引入, 并最终在 Redis 2.0 版本成为 Redis 服务器通信的标准方式。
在这个协议中, 所有发送至 Redis 服务器的参数都是二进制安全(binary safe)的。
RESP 的规定一条命令的格式如下:
*<参数数量> CR LF
$<参数 1 的字节数量> CR LF
<参数 1 的数据> CR LF
...
$<参数 N 的字节数量> CR LF
<参数 N 的数据> CR LF
命令本身也作为协议的其中一个参数来发送。
例如我们经常执行的 SET 命令,在命令行中我们输入如下:
SET key value
使用 RESP 协议规定的格式:
*3
$3
SET
$3 # 这里 key 一共三个字节
key
$5 # 这里 value 一共五个字节
value
这个命令的实际协议值如下:
"*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n"
回复
Redis 命令会返回多种不同类型的回复。
通过检查服务器发回数据的第一个字节, 可以确定这个回复是什么类型
在 发送命令 一节中使用的格式除了用作命令请求协议之外, 也用在命令的回复协议中: 这种只有一个参数的回复格式被称为批量回复(Bulk Reply)。
统一协议请求原本是用在回复协议中, 用于将列表的多个项返回给客户端的, 这种回复格式被称为多条批量回复(Multi Bulk Reply)。
一个多条批量回复以 *<argc>\r\n 为前缀, 后跟多条不同的批量回复, 其中 argc 为这些批量回复的数量。
状态回复
一个状态回复(或者单行回复,single line reply)是一段以 "+" 开始、 "\r\n" 结尾的单行字符串。
以下是一个状态回复的例子:
+OK
客户端库应该返回 "+" 号之后的所有内容。 比如在在上面的这个例子中, 客户端就应该返回字符串 "OK" 。
状态回复通常由那些不需要返回数据的命令返回,这种回复不是二进制安全的,它也不能包含新行。
状态回复的额外开销非常少,只需要三个字节(开头的 "+" 和结尾的 CRLF)。
错误回复
错误回复和状态回复非常相似, 它们之间的唯一区别是, 错误回复的第一个字节是 "-" , 而状态回复的第一个字节是 "+" 。
错误回复只在某些地方出现问题时发送: 比如说, 当用户对不正确的数据类型执行命令, 或者执行一个不存在的命令, 等等。
一个客户端库应该在收到错误回复时产生一个异常。
网友评论