我正在尝试使用Node JS中的套接字编程为多人在线开发API 我有一些基本问题: 1.如何知道哪个连接与用户相关? 2.如何创建与另一个人相关的套接字对象? 3.当对手转弯时,如何进行比赛? 4.移动时间有限,如何处理创建事件和更改转弯的时间?
很明显,我不知道如何处理用户,例如列出在线用户
如果您可以建议一些文章或回答这些问题,那就太好了
谢谢
答案 0 :(得分:1)
在将套接字保存到的内存中保留某种数据结构。您可能需要将node.js套接字包装在您自己的包含id属性的对象中。然后,您可以将这些对象保存到保存在内存中的数据结构中。
class User {
constructor(socket) {
this.socket = socket;
this.id = //some random id or even counter?
}
}
然后在获得新的套接字时将该对象保存在内存中。
const sockets = {}
server = net.createServer((socket) => {
const user = new User(socket);
sockets[user.id] = user
})
User
类一个附加属性timeout
,请执行timeout = setTimeout(timeouthandler,howlong)
,如果触发了超时处理程序,则用户时间已到,请写套接字。如果需要,请不要忘记取消超时。此外,请注意,如果使用纯node.js tcp套接字进行此操作,则需要提出一些临时协议。这是原因:
socket.on("data", (data) => {
//this could be triggered multiple times for a single socket.write() due to the streaming nature of tcp
})
您可以做类似的事情
class User {
constructor(socket) {
this.socket = socket;
this.id = //some random id or even counter?
socket.on("data", (data) => {
//on each message you get, find out the type of message
//which could be anything you define. Is it a login?
// End of turn?
// logout?
})
}
}
编辑:这不是一个很好的扩展。这只是为了让您对可以做什么有所了解。想象一下,由于某种原因,您决定要为数百个用户运行一个node.js服务器实例。所有这些用户套接字实例将存储在服务器内存中