leancloud / js-realtime-sdk Goto Github PK
View Code? Open in Web Editor NEWLeanCloud Realtime Message JavaScript SDK
Home Page: https://leancloud.cn/docs/realtime-guide-beginner.html
License: MIT License
LeanCloud Realtime Message JavaScript SDK
Home Page: https://leancloud.cn/docs/realtime-guide-beginner.html
License: MIT License
Hi, 我想请问一下目前roomObj.join
的语义,究竟是invite
还是join
?
以我目前的实验来看,sign请求发出时action
写的是invite
,请求中members
有且只有一个id,就是用户自己。
单纯从这个roomObj.join
的角度来说,这应该是一个join
语义,但发出的却是invite
请求。
这个奇怪的现象将直接影响后端sign的内部实现。
我认为这很可能是一个BUG。
在web端javascript发送的信息,不能推送到app端。但在app端发送的信息可以在web端接收,应该是javascript的attr与app端的_lcattr没有做好转接
如题
文档中提到 “...收到的消息是当前客户端(clientId)存在的 Room 中的信息....” 这是不是意味着当初始化完成后,我必须为我所有的好友都建立room,不然,我是不是不能提收到他发来信息。
RT,这是一个稳定版吗?相比之前的版本的区别是?
记录 review 中一些问题
null
的考虑是?还没看完,明天可能会继续添加一些
var onLogin = function (session) {
rtObject = lc.realtime({
appId: '我的appId',
clientId: session.userId
}, function () {
console.log('open');
rtObject.on('message', function (data) {
console.log(data);
});
});
rtObject.on('close', function () {
console.log('close');
console.log('reconnecting...');
rtObject.open();
});
};
var enterRoom = function (roomId, receive) {
console.log('Entering room ' + roomId);
var r = rtObject.room(roomId);
r.receive(receive);
return {
send: function(msg) {
var deferred = $q.defer();
r.send(msg, function() {
deferred.resolve();
});
return deferred.promise;
}
};
}
当调用send时,可以正常发出消息,inspect websocket frames也可以看到'ack',但是同一room内的其他peer却无法收到任何消息。上周末时还能正常收到消息,大约从前两天开始就不行了。请问这是什么原因?还是现在sdk不能正常工作?
原来的watch方法也没有了.
var rtObject = lc.realtime({ // appId 需要换成你自己的 appId appId: '9p6hyhh60av3ukkni3i9z53q1l8yy3cijj6sie3cewft18vm', // clientId 是自定义的名字,当前客户端可以理解的名字 clientId: 'abc123' // auth 是权限校验的服务器地址,具体请看文档 // auth: 'http://signature-example.avosapps.com/sign' }); var room = rt.room('sasfalklkjdlfs123');
rt 是什么?
当前用户想和另一人对话时需要创建一个room,把自己和那个人一起加入, 聊了些内容后,过一段时间后,用户再次点开这个好友时,为了获取原来聊的内容,就必须要知道之间的room id,不然,又是新建room 了,那不是我还要想办法记录这个roomid?
stack如下:
ReferenceError: options is not defined
at Object.engine.closeSession (http://localhost:8888/assets/bower_components/leancloud-realtime/src/lc.realtime.js:485:20)
at Object.newRealtimeObject.close (http://localhost:8888/assets/bower_components/leancloud-realtime/src/lc.realtime.js:944:24)
at Object.$get.onLogin (http://localhost:8888/scripts/services/chatService.js:150:42)
at http://localhost:8888/scripts/controllers/app/front/login.js:14:40
at processQueue (http://localhost:8888/assets/bower_components/angular/angular.js:13248:27)
at http://localhost:8888/assets/bower_components/angular/angular.js:13264:27
at Scope.$get.Scope.$eval (http://localhost:8888/assets/bower_components/angular/angular.js:14466:28)
at Scope.$get.Scope.$digest (http://localhost:8888/assets/bower_components/angular/angular.js:14282:31)
at Scope.$get.Scope.$apply (http://localhost:8888/assets/bower_components/angular/angular.js:14571:24)
at done (http://localhost:8888/assets/bower_components/angular/angular.js:9698:47)
这两个方法容易产生误解,考虑 RoomObject 是否也应该有个事件机制:room.on('message', callback);
或者至少方法名不要用主动动词:room.onMessage(callback)
。
与一方在一个room时聊天,但是重新打开进入这个room时 conv.log返回的信息里只有自己的发的信息是怎么回事?
close之后过一段时间会重复出现以下错误:
WebSocket is already in CLOSING or CLOSED state.
wsSend AV.realtime.js:348
(anonymous function) AV.realtime.js:368
感觉像是因为heartbeat还持续在运行。
另外目前有哪个函数可以获取RealtimeObject当前的状态吗(open,closed等)?
内部 issue 地址 https://github.com/leancloud/paas/issues/786
leanmessage-javascript-sdk 是否会持续更新。
https://github.com/leancloud/js-realtime-sdk/blob/master/src/AV.realtime.js#L966
即使id是一个已经存在的roomId,该callback并不会执行,与文档https://leancloud.cn/docs/js_realtime.html#RealtimeObject_room-1 相悖。
后面需要判断一个 room 是否包含自己的逻辑。希望 rt 能方便读取 clientId 变量。这样就不用自己维护了。
@killme2008 @sunng87 @jwfing
实时聊天 SDK 使用过程中发现很多用户试了 XSS,如果是一般的小白用户可能就会忽略这个问题。
所以,是否 SDK 层面直接把 XSS 过滤默认做了?
如果用户有不做的需求,那我们有个配置,可以不做 XSS 转义,但是默认 SDK 层面是做 XSS 防御的。
目前的js-realtime-sdk中貌似还没有办法获取其它client的状态,也没有办法监测上下线事件?后续是否有支持的打算?大约是什么时间能有sdk更新?
PS.
js-realtime-sdk是否可以认为是重构的leanmessage-javascript-sdk?还是这两者各有侧重?
GET http://router-g0-push.avoscloud.com/v1/route?_t=***&appId=*** 404 (Not Found)
Uncaught App not found or disbaled by its owner.
有时候会出现connection timeout的情况,好像目前没有一个on error的callback?
SDK 对用户抛出的异常应当尽可能清晰地传达出发生的错误信息,现在有两点问题。
抛出具体的 Error 实例会显示具体的 Error 类型,并附上调用堆栈,可以帮助用户更快地理解到底发什么了什么。两者区别如下图:
{
ping: function() {
// ...
throw('Must call after open() has successed.');
},
room: function() {
// ...
throw new Error('Must call after open() has successed.');
}
}
参考浏览器内建的几个 Error 类:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types
Error 信息应该包含「发什么了什么错误」,可以给出「可能的原因及解决方案」。比如上面的 case 的错误文案可以更具体:「RealtimeObject.ping() called before the RealtimeObject.open() succeeded. RealtimeObject.ping() should be called in the callback of AV.realtime() or in a handler of 'open' event of RealtimeObject, see https://github.com/leancloud/js-realtime-sdk/blob/master/demo/demo1/test.js .」,这样可能对用户更有价值。
以免用户多次调用 receive 出现会绑定多次,重复收到同样消息的情况。
引入 flash 来兼容 websocket 。
conversation 创建时生成的绑定的 attribute 应该能够在获取这个 conversation 的时候就能取出。
可以在获取时通过一下 query 方法。
经测试,当某些情况发生(如网络状况不良等,无法100%复现)时,会发生同时有多个websocket链接in progress的情况。这个时候,当其它peer发来一条消息,本地的message事件会被调用多次。感觉像是connection被错误的判断为close,所以重新链接了?
js-realtime-sdk 里如何实现单聊
现在的是 ack:
room.send({
text: val
}, {
type: 'text'
}, function (data) {
// 发送成功之后的回调
inputSend.value = '';
showMsg(data);
printWall.scrollTop = printWall.scrollHeight;
});
上面 data 回调是 message 较好,这样可以统一处理,android 和 iOS 都是回调的 message。
每次创建实例化一个 RoomObject 就存储在 cache 中,
用户如果获取相同的 RoomObject 直接返回 cache 中的,防止重复创建。
https://github.com/leancloud/js-realtime-sdk/blob/master/demo/index.html#L42
应该是
<script src="../src/AV.realtime.js"></script>
吧
https://github.com/leancloud/js-realtime-sdk/blob/master/src/AV.realtime.js#L359
这里的throw貌似无处catch?导致的结果是出错,并且on('error')的callback不被执行。
https://github.com/leancloud/js-realtime-sdk/blob/master/src/AV.realtime.js#L1080
if (data.length) {
convObject.id = argument;
convObject.name = data[0].name;
// 获取初始化时的属性
convObject.attr = data[0].attr;
}
上面应该加一句 convObject.members = data[0].members;
另外是不是还应该赋值其它属性,createdAt 和 muted ?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.