美文网首页
IM聊天…环境

IM聊天…环境

作者: 高大强19 | 来源:发表于2020-05-17 21:07 被阅读0次

    零:前言:

    已有:

    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)。

    错误回复

    错误回复和状态回复非常相似, 它们之间的唯一区别是, 错误回复的第一个字节是 "-" , 而状态回复的第一个字节是 "+" 。

    错误回复只在某些地方出现问题时发送: 比如说, 当用户对不正确的数据类型执行命令, 或者执行一个不存在的命令, 等等。

    一个客户端库应该在收到错误回复时产生一个异常。

    相关文章

      网友评论

          本文标题:IM聊天…环境

          本文链接:https://www.haomeiwen.com/subject/eokeohtx.html