我正在我的应用程序中开发一个小型聊天实现,当有人加入/离开频道以及该人是谁时,我想得到通知。
[在客户端,我正在听OnJoin
和OnLeave
,它们带有ServerEventCommand
对象,以展示消息,但是ServerEventCommand
对象在服务器端填充了一些看似随机的属性在客户端上注册后。
我正在研究ServerEventsClient
对象及其所有属性,但找不到在调用Start()
之前让我设置所需属性的方法。
displayName
不是您设置的属性,它由服务器发送,以标识哪些用户正在加入/离开您所订阅的频道。它要么包含用户的UserName
,要么如果您的身份验证提供者不使用用户名(例如,使用电子邮件或ID号),它将使用用户会话的DisplayName
属性。
[例如,使用Server Events Client之前,您需要在.start()
中注册事件处理程序,然后再调用TypeScript ServerEventsClient:
const channels = ["home"];
const client = new ServerEventsClient("/", channels, {
handlers: {
onConnect: (sub:ServerEventConnect) => { // Successful SSE connection
console.log("You've connected! welcome " + sub.displayName);
},
onJoin: (msg:ServerEventJoin) => { // User has joined subscribed channel
console.log("Welcome, " + msg.displayName);
},
onLeave: (msg:ServerEventLeave) => { // User has left subscribed channel
console.log(msg.displayName + " has left the building");
},
}).start();
只有开始订阅并订阅频道后,您才会收到任何事件。
大多数服务器事件客户端还允许您获取用户列表,例如使用TypeScript客户端,您可以调用getChannelSubscribers()
:
client.getChannelSubscribers()
.then(users => users.forEach(x =>
console.log(`#${x.userId} @${x.displayName} ${x.profileUrl} ${x.channels}`)));
或者,您也可以直接调用/event-subscribers
来获取每个频道中的用户列表,例如:
$.getJSON("/event-subscribers?channels={{ channels }}", function (users) {
});
作为参考,有许多使用不同语言编写的简单应用程序,它们使用不同的服务器事件客户端来创建简单的聊天应用程序: