lok*_*san 1 javascript mysql node.js express socket.io
我正在尝试为我的活动管理器网站创建一个通知系统。
每当用户登录并执行某些操作(例如,如果他创建了一个事件),他已创建事件的通知应发送给其他用户。通知应在“ /notification/:username ”页面中提供这是经过身份验证的(其中每个用户的用户名都是唯一的)。
此外,如果用户创建私人事件,则必须将通知发送给相关用户。
我正在使用Nodejs(Express)、socket.io、Vanilla javascript、mysql。为此,如果我是正确的,我需要将 clientid(在我的例子中,它是用户名)和 socketid 作为键值对存储在数据库(mysql)中.但我很困惑如何继续?我不知道如何获取不同用户的socketid并存储在数据库中。我不知道如何继续。如果有人解释我应该做什么,我需要做什么来解决这个问题,等等,那就太好了。谢谢你!
我将尝试向您解释一些可以继续进行的方法。
所以根据我的理解,你已经有一个连接到你的mysql的用户系统,这样你就知道用户信息了,对吗?
所以我是您系统上的授权用户,我可以创建一个事件,当它公开时,需要发送给每个人,对吗?
您可以使用以下内容:
io.emit('event-created', data);`
// so this part from server is gonna send everyone
// your frontend part should recieve this event.
socket.on("event-created", function(data) {
// this is gonna be a public event anyway so everyone can see it
// so here you have your newly created event's data so use it as needed =)
});
Run Code Online (Sandbox Code Playgroud)
所以第二部分有点复杂,它需要是私有的,对吧?
您可以做什么,您告诉我们您的用户名是唯一的,对吗?这样每个人都可以加入以其用户名命名的自己的房间,因此在您的连接中您可以执行以下操作:
io.on("connection", (socket) => {
// I'm assuming that you have a username here
socket.join('uniq-username');
});
Run Code Online (Sandbox Code Playgroud)
我们在这里可以对我来说,如果您想发送仅名为此的事件,halilcakar
则这是我的用户名,并且您已经将我添加到我的房间。你能做的是
io.in('halilcakar').emit('some-event', { ...withSomeData });
当你在代码中的某个地方使用它时,如果我在线,这个事件将只有我才能看到。
那么,假设在创建私人活动时我们需要选择其中包含哪个用户,我想再次说明的是,我对吗?
所以让我们直接使用这段代码。
// this part is already in your connection
// create a private event
socket.on('private-event-created', data => {
// here the data coming from frontend
// while sending this down just make sure data
// has a property called users as usernames and array maybe?
// since you created this event what you can do is send an emit to
// each user like following:
data.users.forEach(username => io.in(username).emit('private-event', data));
// So basicly we are sending this event to
// every user selected by the creator of this private event
// again the part giving this ability is | .in(username) | this part
});
Run Code Online (Sandbox Code Playgroud)
private-event
完成所有操作后,您需要从 socket.io监听此事件
// so on frontend
socket.on('private-event', function(data) {
// here do the private events objectives.
// and the good part that even me(single user)
// I'll know who has this private-event by
// data.users
});
Run Code Online (Sandbox Code Playgroud)
我希望这会给你更多的想法:))请随时询问
归档时间: |
|
查看次数: |
10060 次 |
最近记录: |