hprose/hprose-nodejs

question

jiuhao opened this issue · 8 comments

hprose.Server.create("http://0.0.0.0:8080") what is means

想问下,在推送服务中server.push(topic, id, result); 能不能从客户端传参数到result方法中

andot commented

你可以在一个普通调用中传递数据给服务器,然后在服务器端推送给客户端时把普通调用传来的参数以 result 推送给客户端。

@andot 嗯嗯,谢谢

andot commented

不客气。如果你有QQ,可以加QQ群交流:48855729

参数 topic 是订阅的主题名,它实际上也是一个服务器端的方法,该方法与普通方法的区别是,它只有一个参数 id,该参数表示客户端的唯一编号,该方法的返回值即推送信息,当返回值为 null 或者抛出异常时,客户端会忽略并再次调用该 topic 方法。当该方法返回推送消息时,callback 回调函数会执行,并同时再次调用该 topic 方法。因此当没有推送消息时,该方法不应该立即返回值,而应该挂起等待,直到超时或者有推送消息时再返回结果。

这段话中的“当该方法返回推送消息时,callback 回调函数会执行,并同时再次调用该 topic 方法”,是hprose自己去调server.push(topic, result)么(好像没有),还有那个时间推送服务器使用了setInterval,客户端虽然取消了订阅,但服务端还是一直再执行,为什么要这样做呢,求大神解释。。。

andot commented

上面一段解释是说明推送是如何实现的,以及如何在不使用 hprose 2.0 的情况下,自己实现推送功能。使用 hprose 2.0 的情况下,上面的那个解释看不懂也没关系。

那个 timeserver 的 setInterval 是一直执行,但是客户端在取消订阅之后,服务器端可以检测到客户端掉线,并将客户端 id 从服务器端的客户端列表中移除,当客户端列表为空时,那个 setInterval 虽然会每隔一秒钟执行一次,但是实际上只是检查列表是不是空,是空的情况下什么都不会做。

搜噶,懂了