一篇文章引起的思考?html
一次读公号推文, 发现一篇文章写得特好, 勾起了好奇心前端
《群聊比单聊,为何复杂这么多?》,
@沈大大
.vue
- iOS版本手机QQ中清空不了 Cookie 的bug (Android 版本的QQ没试), 其它浏览器均正常
- 手机微信中打开后点击输入文字后, 无论点不点击发送按钮都会出现短暂的不能点击的现象(任何按钮都不能点击), 后来发现是由于在微信里面, 输入法把 输入框顶上去了, 而后输入法隐藏后输入框还在上面!!!! 点击查看详情 。找到一个解决输入框的方法: @blur="chatTextBlur" 监听失去焦点的事件(vue 写法), 而后在事件里面执行
window.scroll(0, 0);
- 由于设置了定位,
overflow: scroll
原生滚动,iOS下会不流畅,解决办法:换成-webkit-overflow-scrolling: touch;
这个版本管理确定须要安装的node
node 版本最新的便可webpack
JDK 8git
3.6.1github
构建工具用 vue 目前使用的 2.x 版本web
2.1.2spring
git clone https://github.com/lmxdawn/him-netty.git
cd him-netty
建立数据库,名称: him, 把 根目录下 scripts 里面的 him.sql 导入进去
mvn -Dmaven.test.skip=true clean package
java -jar him-api/target/him-api-0.0.1-SNAPSHOT.jar
若是要加环境配置
--spring.profiles.active=pro
便可, 默认是 dev 环境。 特别要注意:配置文件里面有跨域配置,这个必定要注意
git clone https://github.com/lmxdawn/him-vue.git
cd him-vue
npm install
npm run serve
本地测试版 |npm run build
编译命令
him-vue 前往 和 him-netty 前往 都启动后访问 http://localhost:8080
注意 默认使用 QQ登陆, 这个须要去申请QQ互联, 若是不想去申请, 则能够直接设置 Cookie, 两个值 UID 和 SID, 这两个值能够经过接口 /api/user/login/byPwd 获取, 具体请看java 代码
him-api/src/main/resources/ 这里的配置文件里面,
qq.auth.appid
和qq.auth.appkey
配置上便可
详细配置 根目录下的
.env.development
.env.production
.env.stage
这三个文件是配置, 分别表明 本地测试,生产环境,线上测试环境
名称 | 描述 |
---|---|
VUE_APP_API_BASE | API接口地址 |
VUE_APP_WEBSOCKET_URL | websocket地址 |
VUE_APP_USER_QR_CODE_URL | 生成用户的二维码地址(用来加好友的) |
VUE_APP_GROUP_QR_CODE_URL | 生成群二维码的地址(用来加群的) |
VUE_APP_ROUTER_BASE | 若是用了 NGINX 作代理, 而且有二级路径, 则须要配置此项 |
NGINX 作了端口的代理后, header 头 设置了跨域, 可是仍是获取不了, 不知道为啥, 欢迎大神来指导
最后个人解决办法, 所有用一个域名, 而后 NGINX 作路径的转换,下面贴一下个人配置
# 前端路径, 注意这里配置了二级目录后, 须要 vue 的路由里面也须要配置
# 我是写在配置文件里面的 VUE_APP_ROUTER_BASE 这个配置项来控制的
location /h5 {
try_files $uri $uri/ /h5/index.html;
}
# API 路径
location /api
{
proxy_pass http://127.0.0.1:9000/api;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
}
# ws 路径
location /ws
{
proxy_pass http://127.0.0.1:9001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
}
复制代码
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
isShow | 是否显示界面 | boolean | — | true |
width | 宽度 | string | — | 100% |
height | 高度 | string | — | 100% |
top | 定位的顶部位置 | string | — | — |
left | 定位的左边位置 | string | — | — |
bottom | 定位的底部位置 | string | — | — |
right | 定位的右边位置 | string | — | — |
apiBaseUrl | api 接口的地址 | string | — | — |
webSocketUrl | websocket 的链接地址 | string | — | — |
userQRCodeUrl | 用户二维码的生成地址 | string | — | — |
groupQRCodeUrl | 群二维码的生成地址 | string | — | — |
isAutoInit | 是否自动初始化(若是为 false 须要执行) | boolean | — | true |
webSocketReconnectMaxCount | 尝试从新链接的最大次数 | number | — | 5 |
把图片放入 git 版本控制里, 上传到 GitHub 上, 而后 在 GitHub 里打开这个图片 把里面的 blob 改成 raw
我这里直接用的 七牛云的, 由于怕 GitHub 的访问太慢
说明: 目前全部文件都生成好了,不须要在生成,下面简单说明下
下载好 him-netty 后在 protocol 目录下
生成 java 类须要安装 安装 protoc 下载地址:github.com/protocolbuf…
目前下载的 v3.7.1,解压到任意目录 ,而后把这个目录添加到环境变量 Path 中
而后 windows 版本执行
proto.bat
便可,Linux/Max 运行sh proto.sh
目前我是安装好了 protobufjs 了,proto 文件放在 /src/proto 目录。 运行命令 pbjs -t json-module -w commonjs -o src/proto/proto.js src/proto/*.proto 便可 因为我添加到了 package.json 中,直接运行 npm run protojs 也能够
上面的执行完成后,会在 src/proto 目录下生成 proto.js 文件,因为 webpack 新版本的缘由直接引入该文件会报错 Cannot assign to read only property'exports'of object' 须要修改最后一行代码为:
export default $root;
import protoRoot from "@/proto/proto"
const WSBaseReqProto = protoRoot.lookup("protocol.WSBaseReqProto");
const WSBaseResProto = protoRoot.lookup("protocol.WSBaseResProto");
// 编码
function (payload) {
// 加入登陆验证
payload.uid = parseInt(this.getUid());
payload.sid = this.getSid();
console.log("发送的信息:");
let errMsg = WSBaseReqProto.verify(payload);
console.log("buff 解析错误信息:", errMsg);
// Create a new message
const wsData = WSBaseReqProto.create(payload); // or use .fromObject if conversion is necessary
// Encode a message to an Uint8Array (browser) or Buffer (node)
return WSBaseReqProto.encode(wsData).finish();
}
// 解码
function (data, cb) {
let reader = new FileReader();
reader.readAsArrayBuffer(data);
reader.onload = () => {
const buf = new Uint8Array(reader.result);
const response = WSBaseResProto.decode(buf);
// 成功回调
cb(response);
};
}
复制代码